一、创建数据库
创建一个保存员工信息的数据库:
#通用的写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
相关其他命令
show databases;查看当前所有数据库
use employees;“使用”一个数据库,使其作为当前数据库
数据库命名规则:
- 数据库名不得超过30个字符,变量名限制为29个
- 必须只能包含 A–Z, a–z, 0–9, _共63个字符
- 不能在对象名的字符间留空格
- 必须不能和用户定义的其他对象重名
- 必须保证你的字段没有和保留字、数据库系统或常用 方法冲突
- 保持字段名和类型的一致性,在命名字段并为其指定数 据类型的时候一定要保证一致性。假如数据类型在一 个表里是整数,那在另一个表里可就别变成字符型了
二、创建表
2.1.CREATE TABLE 语句
必须具备:
- CREATE TABLE权限
- 存储空间
必须指定:
- 表名
- 列名, 数据类型, 大小
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名();
2.2.创建表
语法:
DESCRIBE
:命令用于显示表的结构,包括列名、数据类型、键信息等
2.3.常用数据类型
数据类型 | 含义作用 |
INT | 使用4个字节保存整数数据 |
CHAR(size) | 定长字符数据。若未指定,默认为1个字符,最大长度255 |
VARCHAR(size) | 可变长字符数据,根据字符串实际长度保存,必须指定长度 |
FLOAT(M,D) | 单精度,M=整数位+小数位,D=小数位。D<=M<=255,0<=D<=30, 默认M+D<=6 |
DOUBLE(M,D) | 双精度。D<=M<=255,0<=D<=30,默认M+D<=15 |
DATE | 日期型数据,格式’YYYY-MM-DD’ |
BLOB | 二进制形式的长文本数据,最大可达4G |
TEXT | 长文本数据,最大可达4G |
案例:创建表
# 创建表
CREATE TABLE emp(
# int类型,自增
emp_id INT AUTO_INCREMENT,
# 最多保存20个中英文字符
emp_name CHAR(20),
# 总位数不超过15
salary DOUBLE,
# 日期类型
birthday DATE,
# 主键
PRIMARY KEY(emp_id)
)
查看表结构:
2.4.表的复制
准备创建表的SQL:
CREATE TABLE author(
id INT,
name VARCHAR(12),
country VARCHAR(12)
)
INSERT INTO author VALUES
(1,'格拉西莫夫','俄罗斯'),
(2,'苏洛维金','俄罗斯'),
(3,'冯唐','中国'),
(4,'金庸','中国');
案例说明:
# 1.仅仅复制表的结构
CREATE TABLE copy LIKE author
# 2.复制表的结构和数据
CREATE TABLE copy2 SELECT * FROM author
# 3.只复制部分数据
CREATE TABLE copy3
SELECT id,name FROM author WHERE country = '俄罗斯'
# 4.仅仅复制某些字段(不复制数据)
CREATE TABLE copy4
SELECT id,name FROM author WHERE 0;
三、常见的数据类型
3.1.数值类型
⑴.整型
特点:
① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
② 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
③ 如果不设置长度,会有默认的长度
创建表的时候字段类型后面的数字表示的是长度,长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!
# 1.创建表的狮吼功设置无符号和有符号,默认是有符号,通过在自动后面添加ZEROFILL启用有符合
DROP TABLE IF EXISTS tab_int
CREATE TABLE tab_int(
t1 INT(7) ZEROFILL,
t2 INT(7) ZEROFILL
)
# 插入数据
INSERT INTO tab_int VALUES(-123456,-123456)
INSERT INTO tab_int VALUES(1,4294967294);
# 查看表结构
DESC tab_int
SELECT * FROM tab_int
⑵.小数
分类:
1.浮点型
- float(M,D)
- double(M,D)
2.定点型
- dec(M,D) 这个是下面decimal的简写
- decimal(M,D)
特点:
①说明
M:整数部位+小数部位
D:小数部位
如果超过范围,则插入临界值
②
M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
③定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用
# 测试M和D
DROP TABLE IF EXISTS tab_float
CREATE TABLE tab_float(
f1 FLOAT,
f2 DOUBLE,
f3 DECIMAL
)
# 查看表结构
DESC tab_float
# 查看数据
SELECT * FROM tab_float
# 插入数据
INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);
⑶.位类型
3.2.字符类型
⑴.char和varchar类型
char和varchar类型 说明:用来保存MySQL中较短的字符串。
⑵.binary和varbinary类型
说明:类似于char和varchar,不同的是它们包含二进制字符串而不包含非二进制字符串。
⑶.Enum类型
说明:又称为枚举类型哦,要求插入的值必须属于列表中指定的值之一。 如果列表成员为1~255,则需要1个字节存储 如果列表成员为255~65535,则需要2个字节存储 最多需要65535个成员!
# 创建表
DROP TABLE IF EXISTS tab_float
CREATE TABLE tab_enum(
c1 ENUM('a','b','c')
)
# 只能插入'a','b','c'
INSERT INTO tab_enum VALUES('a');
INSERT INTO tab_enum VALUES('b');
INSERT INTO tab_enum VALUES('c');
# d是无法插入的
INSERT INTO tab_enum VALUES('d');
SELECT * FROM tab_enum
⑷.Set类型
说明:和Enum类型类似,里面可以保存0~64个成员。和Enum类型最大的区 别是:SET类型一次可以选取多个成员,而Enum只能选一个 根据成员个数不同,存储所占的字节也不同
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);
# 注意插入的时候需要通过引号包裹起来
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');
SELECT * FROM tab_set
3.3.日期类型
datetime和timestamp的区别:
- Timestamp支持的时间范围较小,取值范围: 19700101080001——2038年的某个时间 Datetime的取值范围:1000-1-1 ——9999—12-31;
- timestamp和实际时区有关,更能反映实际的日 期,而datetime则只能反映出插入时的当地时区;
- timestamp的属性受Mysql版本和SQLMode的影响很大;
/*
分类:
date只保存日期
time 只保存时间
year只保存年
datetime保存日期+时间, 不受时区影响
timestamp保存日期+时间,会受时区影响
*/
# 创建表
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
)
# 插入数据
INSERT INTO tab_date VALUES(NOW(),NOW());
# 查看数据
SELECT * FROM tab_date
# 查看所在时区
SHOW VARIABLES LIKE 'time_zone';
# 修改时区,这样修改时区后DATETIME和TIMESTAMP会相差一小时,因为TIMESTAMP会受到时区的影响
SET time_zone='+9:00';
四、修改表的定义
使用ALTER TABLE 语句可以实现:
- 向已有的表中添加列
- 修改现有表中的列
- 删除现有表中的列
- 重命名现有表中的列
4.1.追加一个新列
ALTER TABLE boys ADD skill VARCHAR(15)
4.2.修改一个列
修改列,可以修改列的数据类型, 尺寸和默认值
ALTER TABLE boys MODIFY skill VARCHAR(20)
ALTER TABLE employees MODIFY salary DOUBLE(9,2) DEFAULT 1000
- 对默认值的修改只影响今后对表的修改
4.3.删除一个列
使用DROP COLUMN 子句删除不再需要的列
ALTER TABLE boys DROP COLUMN skill
4.4.重命名一个列
使用CHANGE old_column new_column dataType 子句重命名列
ALTER TABLE boys CHANGE boyName name VARCHAR(15)
五、删除,重命名和清空表
5.1.删除表
- 数据和结构都被删除
- 所有正在运行的相关事务被提交
- 所有相关索引被删除
- DROP TABLE 语句不能回滚
DROP TABLE dept
5.2.清空表
TRUNCATE TABLE 语句:
- 删除表中所有的数据
- 释放表的存储空间
TRUNCATE TABLE employees
注意:
- TRUNCATE语句不能回滚
- 可以使用 DELETE 语句删除数据,可以回滚
5.3.改变对象的名称
执行RENAME语句改变表, 视图的名称
将表名beauty修改为tb_beauty
ALTER TABLE beauty RENAME TO tb_beauty