创建表语法:
说明:
field 表示列名。
datatype 表示列的类型。
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。
engine 存储引擎,如果没有指定校验规则,则以所在数据库的配置为准。
查看表的相关属性。
查看表创建时的SQL语句。
并且在数据库中也有了对应的表文件。
修改表语法:
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);
ALTER TABLE tablename DROP (column);
下面我们增加一个列属性:
我们也可以对列属性进行调整。
我们可以看出修改属性内容之后,之前的SQL全部被覆盖了。
如果我们想删除表的一列:
下面我们进行修改列的名字:
下面我们也可以修改表名字:
这里的to可以省略。
数值越界测试:
可以看到,如果插入的数据不符合要求,mysql直接终止操作。数据类型,在MySQL这里,符合条件,让你操作,不符合条件,不让你操作。这其实就是对程序员的一种约束。所以数据类型本质就是一种约束。
bit使用的注意事项:bit字段在显示时,是按照ASCII码对应的值显示。
如果我们有这样的值(比如说性别),只存放0或1,这时可以定义bit(1)。这样可以节省空间。
小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
可以看到小数点第3位,是小于4的就会省略,然后插入,大于等于5的就不能插入了。
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99。
decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别:float和decimal表示的精度不一样。
可以看到两个都插入同一个浮点数,但是float的值不一样了。我们发现decimal的精度更准确,因此如果我们希望某个数据表示高精度,选择decimal。
说明:
float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0。如果m被省略,默认是10。
举个例子:
当插入的字符串的长度超过限制,就不能进行插入了。
最后一个是空字符串,不是NULL,它们是不同的含义。
char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255。
为什么varchar是可变字符串,为什么还要有L?
当我们输入的字符超过长度时,就不能进行插入了,这个和char是一样的。
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
1.varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
2.当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。
这里的时间戳的备述是,第三个会自动帮我们填写。
如果我们修改前面的数据,那么时间戳也会自动更新。
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值,而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…最多64个。
举个例子:
有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),但是性别只有(男,女)[单选]
并且 我们也可以用数字来代替字符。
set也可以用数字来代替,但是它是以位图形式。0001是代码,0010是登山,0011是代码和登山,0100是打篮球,0101是代码和打篮球等等这样。
下面我们继续看一个问题:
我们看到不能查询出所有,爱好里有代码的人。我们要使用这个函数:
这个函数是在某个集合中找,如果找到就返回在集合里的下标。
并且我们也可以级联条件。
我们可以看到,我们想要查询代码和游泳不行,必须是连着一起的才能查询到。
我们使用and就能查询到,如果我们使用or的话,就是代码或者游泳。
所以都能查询到。