本文为《SQL学习指南》一书的学习笔记,供自己记录查找使用。如有侵权可私信删除。
《SQL学习指南》Chap 2 MySQL数据库的创建和使用(一)
目录
一、创建MySQL数据库
数据库的创建:
若要使用脚本,可以使用source语句将其导入:
mysql> source c:\temp\learningsql.sql;
二、使用MySQL命令行工具
可以同时指定用户名和所要使用的数据库,如下:
mysql -u Eileen -p bank
之后提示输入密码,再输入密码即可.
mysql>标记出现后可以运行SQL语句并查看结果,如果是->语句可以使用ctrl+c中止当前语句。
三、数据类型
1.字符型
char(20) 定长字符串( < 256 bites)
varchar(20) 变长字符串( < 65536 bites)
char与varchar的区别【面试】:
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,以空间换取时间效率。varchar则刚好相反,以时间换空间。
区别之二,存储的容量不同
对 char 来说,最多能存放的字符个数 255,和编码无关。而 varchar 呢,最多能存放65535个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65535字节。
如要存储更多,则要使用tinytext / text / mediumtext / longtext.
2.数值型
常用数据类型:
1.numeric 数值型
2.boolean 布尔型
3.整数:
4.浮点数:
在类型后可加入UNSIGNED关键字,来限制数值非负.对于整数来说,这个限制会改变存储数据的范围(如上表),而浮点数只是不允许存储负数,数值范围不改变.
如果规定了unsigned但存放了一个负数就会出现警告,得到的结果是字节数(所能存储最大整数+1,18446744073709551616)加上这个负数的值。
3.时间型
常用类型有:year date datetime timestamp
timestamp和datetime存储的数据形式相同,但是timestamp有一个额外的好处:可以自动为当前列产生当前日期/时间,用以记录用户何时修改表中特定行.与此同时,其允许存储的时间数据范围比datetime小一些.
四、表的创建
创建表格. 设计→精化→构建SQL语句.
创建表:create table语句.
例:
CREATE TABLE person
(person_id SMALLINT UNSIGNED /*关键字,表明所存储的数据大于等于0 */,
fname VARCHAR(20),
iname VARCHAR(20),
gender CHAR(1),
birth_date DATE,
CONSTRAINT pk_person PRIMARY KEY (person_id)
);
最后这一行的constraint (约束)表明 以person_id作为表的主键.
CONSTRAINT 约束
上一个语句中的约束成为主键约束(主键:primary key),它被创建在person_id这一列上,并被命名为pk_person.
注意到还有一种类型的约束也非常有用。person表中,第三列只接受特定值(‘M’或‘F’),此时可增加一个检查约束,以限制该列仅存放被允许的值.在定义列时可以关联一个检查约束:
gender CHAR(1) CHECK (gender IN (‘M’,‘F’)),
外键约束在后文进行介绍.
MySQL中还有一种名叫enum的字符数据类型,将检查约束与数据类型定义融合在了一起:
gender ENUM (‘M’,’F’)
当服务器返回消息‘Query OK, 0 rows affected’时,表明该语句没有语法错误.如下图所示.
如果想查看这个表的各项属性,可以使用describe(desc)命令检查表的定义.
describe产生的表展示了person表的属性。为这个表加入一些解释:
· Null列:表示该列是否允许在插入数据时被省略。
某些时候无法在插入数据时为表中某一列提供具体值,例如,在增加一条客户订单数据时,ship_date列还不能确定,则这列被设置为NULL(注意:设置为NULL与说它等于NULL有根本上的不同),以指明该列在插入数据时的缺失。NULL被用于各种不能赋值的情况,例如:a.业务上不可行;b.不知道应赋何值;c.集合为空。设计表时,默认各列允许为null, 对于不允许的列在类型后面加上not null关键字即可。
· Default列:如果在插入数据时忽略该列,是否向其提供默认值。这个表中person_id一列的默认值为0,但是只能起一次作用,因为这一列作为主键每一行的值都必须唯一。
外键
对于使用外键,我们再创建一个food表进行说明,该表用以表示各人最喜爱的食物。
CREATE TABLE food
(person_id SMALLINT UNSIGNED,
food VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id,food),
CONSTRAINT fk_fav_food_person_id FOREIGN KEY(person_id)
REFERENCES person(person_id)
);
· 外键约束:限制了food表中person_id的值只能来自于person表。这种约束限制了无法向food表中添加person_id不在person表中的人的食物数据。而food列也因此成为主键。
今天学到的命令小结:
指定用户名和所要使用的数据库 mysql -u Eileen -p bank
创建表 create table xxx ( a var(20) , b smallint unsigned);
constraint约束的使用:
主键约束 CONSTRAINT pk_person PRIMARY KEY (person_id),
检查约束 gender CHAR(1) CHECK (gender IN (‘M’,‘F’)),
可以用ENUM替代:gender ENUM (‘M’,’F’),
外键约束 CONSTRAINT fk_fav_food_person_id FOREIGN KEY(person_id)/*这个是food表中的列*/ REFERENCES person(person_id)/*参考person表中的person_id列,即表明把主键连接到哪里去*/
数值型,unsigned关键字表示非负
今天就是这些啦!一会儿出去散个步回来看嘉伦新剧《周生如故》,Byeヾ(•ω•`)o