创建表
和之前的创建库差不多,需要多指定一个engine(不写默认INNODB)这个后面说
字符集还有校对规则不指定的话和库的保持一致
案例
图形化创建就不说了,主要就指令
# 演示关于创建表的操作
# 在db02创建表USER包含id-整形 name-字符串 password-字符串 birthday-日期
# 因为USER是关键字要用``括起来,就只要变蓝就是关键字,如果你定义的是个变量用``括起来就ok
CREATE TABLE `USER` (
id INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB
效果
根据左上角的这个来判断对哪个数据库执行操作,然后会在对应的数据库生成表!
表中常用数据类型(列类型)
数据类型概念就我们java里面的boolean,int那些
因为mysql里面的数据类型有点不同需要拿出来讲解
关于细节,比如是decimal[M,D]
M和D是什么意思,我们在下面讲,先大致了解有哪些数据类型
常用类型:
整形:int
小数类型:double和decimal[M,D]
文本类型:char,varchar和text
二进制类型:都不常用
日期类型:datatime,timestamp
在满足需求情况下,尽量使用占用内存小的数据类型,来提高我们的效率
整形
默认是有符号的
定义无符号在数据类型后面加一个unsigne即可
位类型
不常用但有用
BIT()括号里面的是位数,8位一个字节1-64位就是最大8字节
还有就是你添加的数据是按照位(二进制)显示的
我们放的3就是b'11',这个b''就是代表这个数据是二进制显示的
查询的时候我们也是输入对应的十进制就ok
主要是你想分配0、1只有这两个值
可以用bit(1)实现
使用其实不多
小数类型
DECIMAL(M,D)
M是小数位数的总数(就是整个这个数能有多少位)最大65,默认10
D表示小数点后面的位数(写成0就是整数,可以在BigINT不够时候用)最大30,默认0
float和double就是最大精度不一样,不会自动补0
decimal你设置小数点位数20,如果没有达到会自动补0你要存一个非常大的数也可以用decimal
字符串类型
注意:char和varchar后面一定要加括号表示范围
注意:
CHAR(size)这个size是字符0-255,不管编码格式,就英文还是汉字,一个算一个字符
VARCHAR(size)里面的size是字符,但是它的范围是通过字节来算的,VARCHAR字节范围是0-65535字节,可以从编码格式,比如utf8/gbk的几个字节一个字符来推出,对应编码的最大储存字符,VARCHAR会占用1-3字节存放内容长度,所以一般你只有65535-3个字节来储存真正的信息,从此可以推出utf8(3字节一字符)最大储存字符,65532/3=21844个字符,gbk(2字节义字符)的话最大计数65532/2=32766字符
关于用途
VARCHAR不够用可以用TEXTHIA不够还有MEDIUMTEXT和LONGTEXT
变量类型 NOT NULL DEFAULT 默认值
这个指令就是指定的变量类型不允许为空
如果为空,会赋给其默认值
默认值在DEFAULT 后面,下面会有用到该指令慢慢看
日期类型
timestamp只占四个字节,只能表示到2038年
所以我们一般都用datetime(8字节)
# 演示日期类的基本使用
# 创建一张表,data,datatime,timestamp
CREATE TABLE t2(
birthday DATE,-- 生日因为生日一般就记到年月日
job_time DATETIME,-- 可以记录年月日时分秒
login_time TIMESTAMP
NOT NULL DEFAULT -- 不允许为空
CURRENT_TIMESTAMP -- 如果为空就默认为当前时间的timestamp
ON UPDATE CURRENT_TIMESTAMP -- 如果我们更新t2的某条记录,对应的这个timestamp列自动以当前时间更新
);-- 登陆时间,如果希望timestamp类型自动更新,需要配置,对应后缀有注释解释
SELECT * FROM t2;
INSERT INTO t2 (birthday,job_time)
VALUES('2022-11-11','2022-11-11 10:10:10');
效果图
小练习
CREATE TABLE pratice(
id INT,
`name` VARCHAR(32),-- 名字
`sex` CHAR(1),-- 性别一般一个,可能两个
`birthday` DATE, -- 生日年月日
entry_date DATETIME, -- 年月日时分秒
`job` VARCHAR(32), -- 分配10个字符吧,毕竟是变动的
salary DOUBLE, -- 工资
`resume` TEXT -- text没有(),有默认范围,查询的时候会显示用的字节数,最后没逗号
) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;-- 区分大小写
-- 添加信息
INSERT INTO pratice VALUES(
100,"小袁",'男','2003-5-20',
'2024-7-20 13:50:32','程序员',4000,'一个平凡的大学生');
-- 查询一下
SELECT * FROM pratice;
效果
用代码查询比较好
删除和修改表
图形化的操作不说
删除
很简单
DROP TABLE tablename
就这样再指定数据库删除即可
修改表
这里的修改主要是针对表的列!,具体数据修改估计在下一篇文章了
小练习
-- 修改表的操作
-- 查询一下
SELECT * FROM pratice;
DROP TABLE t1
-- 添加列,修改表一般都是Alter table tablename指令开头,
ALTER TABLE pratice ADD(
what VARCHAR(32) NOT NULL DEFAULT '' -- 不允许为空指令后面加一个当它为空时默认的赋值
AFTER RESUME-- 指定位置
);-- 这个加不加括号都可以,what用来检测
-- 查看表结构(查看列)
DESC pratice
-- 修改job,使其长度为60-单纯修改数据类型
ALTER TABLE pratice
MODIFY job VARCHAR(60) NOT NULL DEFAULT '无业游民';-- 这个指令好像不用加括号
-- 删除what列
ALTER TABLE pratice
DROP what-- 也是不加括号
-- 表名改为employee
RENAME TABLE pratice TO empolyee
-- 改了表名,就查询新名
DESC empolyee
-- 修改表的字符集为utf8,虽然说原来就是,用用指令而已
ALTER TABLE empolyee CHARACTER SET utf8
-- 列名name修改为user_name
-- 逆天的,列名修改后面还要加数据类型,也可以既改名也改数据类型
ALTER TABLE empolyee CHANGE NAME user_name VARCHAR(32) NOT NULL DEFAULT ''
效果