本文共 1753 字,大约阅读时间需要 5 分钟。
about storage engines,目前,你得知道我们目前使用的是innodb,创建不同引擎的表,生成的文件会有些特点,这里暂时不写,select可以查询表中的数据,desc t1,是查看表的结构信息,show create table t1\G;可以更详细的查看表的结构信息,复制表,表结构和数据都复制,create table t2 select * from t1;只复制表结构,create table t3 like t1; create table t4 select * from t1 where 1>3;mysql中用tinyint来模拟boolean,tinyint默认是有符号数,通过插入负数是否报错,可以看出来,int[(m)][unsigned][zerofill],这是数的定义格式,其它比如tinyint等一样中括号代表可有可无,m代表设定显示长度,关于int(5),这个5是显示宽度,注意区分它与存储宽度的区别,结论就是你可以不用理会,why?因为默认的显示长度是根据你的类型比如int,在此基础上加1,如果你指定了,若是数比较小,使用zerofill可以用0填充空余位置,若是数大,就会该是多少就显示多少,FLOAT[(M,D)] [UNSIGNED] [ZEROFILL],浮点数的定义格式,(联想记忆:定点数)M代表整个个数,D代表小数个数,对于DOUBLE而言M,D的范围不同,但这些数都存在靠后不准确的情况,相信应该不是那么重要,从而忽略了对这里的处理,create table t15(x float(25,21));insert into t15 values(1.111111111111111111111111111);然后你select * from t15;就能看到它有多不准确.ps:相对来说decimal最精确,
关于时间类型:year类型:范围1900~2155,date类型,即日期,插入的数据得用引号,time类型,即时间,插入的数据得用引号,datetime,即日期&时间,插入的数据得用引号,timestamp,这个时间比较的时候会用到,插入数据的时候也得用引号,ps:now()函数可以插入当前的时间, 时间插入有一些简写的方法,不做重点,char and varchar,(注意发音)前者存取快,后者可以根据数据大小,合理占用空间,时间,空间转换的例子,char(n),这个n不同于int中的,这里指字符的长度,字符!!!
create table t1( e enum('1','2'), s set('1','2') );ps:上面都得是字符串形式,枚举是多选1,集合是多选多,
约束条件,create table t1( id int, ip int, port int, unique(ip,port) );//联合唯一 primary key(ip,port) //这是复合主键auto_increment,如果不插入这项数据,则新插入数据,这项会自动增长,如果指定了,则后续会在此基础上增加,还有一些细节,比如清空表格,步长,偏移量,
foreign key,出现的原因,比如员工很多,但是部门以及对应的信息,就那几个,所以单独把部门信息写进一张表,用一个id指向这个部分,然后在最初的表中,就不再需要用老长的数据存储,而只需要一个部门id即可,越是数据多,这种方式生下来的存储空间就越多,下面是外键的使用方式, dep_id int, //1.先定义那个数据, constraint fk_dep foreign key(dep_id) references dep(uid) //2.然后修饰这个数据,由于两张表有个数据的关联,就涉及到一个同步的问题,你得自己手动操作,并且顺序是你引用的那个表得后删除,可能是因为,你先删除被引用的数据,那么另一个表就存在找不到数据的错误,如果想自动关联数据的改变,你得在引用外部表的那个表中添加, on delete cascade #同步删除 on update cascade #同步更新,之后两张表的操作顺序,就没有限制了,并且相互之间的更改自动更新.