MySQL服务器端数据的逻辑结构:
SERVER=>DATABASE=>TABLE=>ROW=>COLUMN
1.常用的SQL语句:
(1)增:INSERT INTO 表 VALUES(值, 值, ...);
(2)删:DELETE FROM 表;
(3)改:UPDATE 表 SET 列=值, ...,列=值 ;
(4)查:SELECT * FROM 表;
2.MySQL中的列类型
(1)数值类型 —— 可用引号括起来也可以不用
整数数值类型: student( age TINYINT )
TINYINT:微整数,占1字节,-128~127
SMALLINT:小整数,占2字节,-32768~32767
INT:整数,占4个字节, -2147483648~2147483647
BIGINT:大整数,占8个字节,.....
小数数值类型: product( price DECIMAL(7, 4) ) //一共7位,其中4位小数位
FLOAT(M,D):单精度浮点型,占4字节,3.4E38,计算时可能产生四舍五入
DOUBLE(M,D):双精度浮点型,占8字节 1.8E30,计算时可能产生四舍五入
DECIMAL(M,D):定点小数,不会产生精度舍入
布尔数值类型: product( isOnsale BOOL)
BOOL,布尔/真假类型只能取值为TRUE/FALSE。注意:MySQL数据库中没有真正意义上的布尔类型,TRUE等同于1,FALSE等同于0
(2)日期时间类型 —— 必须用引号括起来
DATE:日期类型,形如'2017-5-10'
TIME:时间类型,形如'22:08:5'
DATETIME:日期/时间类型,形如'2017-10-25 22:8:5'
(3)字符串类型 —— 必须用引号括起来 emp(resume ...)
CHAR(M):定长字符串,比VARCHAR操作速度更快,M不能超过255
VARCHAR(M):变长字符串,比CHAR更能节约空间,M不能超过65535
TEXT(M):大型变长字符串,M不能超过2G
3.MySQL中的列约束
Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为“列约束”
(1)主键约束 —— PRIMARY KEY
声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 —— 因此一个表中至多只能有一个主键列。
(2)非空约束 —— NOT NULL
声明为非空的列,不能出现NULL,但可以出现重复值。
(3)唯一约束 —— UNIQUE
声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)
(4)检查约束 —— CHECK
检查约束可以检查新插入的数据是否满足指定的条件,如:
student( age INT CHECK(age>=18 AND age<=60) )
MySQL不支持此约束!
(5)默认值约束 —— DEFAULT
student(sid INT, sex CHAR(1) DEFAULT '男' );
使用默认值的方式
1)INSERT INTO student VALUES(10, DEFAULT);
2)INSERT INTO student(sid) VALUES(20);
(6)外键约束 —— FOREIGN KEY...REFERENCES
4.MySQL中使用自增列
id INT PRIMARY KEY AUTO_INCREMENT
自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。
注意:SQL标准中没有此关键字,它是MySQL所专有的!
例子:
SET NAMES UTF8;
#丢弃数据库
DROP DATABASE IF EXISTS tedu;
#创建数据库
CREATE DATABASE tedu CHARSET=UTF8;
#进入数据库
USE tedu;
#创建部门表
CREATE TABLE dept(
did INT PRIMARY KEY,
dname VARCHAR(32) UNIQUE NOT NULL,
empCount INT
);
INSERT INTO dept VALUES('10','研发部','3');
INSERT INTO dept VALUES('20','市场部I','1');
INSERT INTO dept VALUES('30','市场部II','2');
#创建员工表
CREATE TABLE emp(
eid INT PRIMARY KEY, #主键列
ename VARCHAR(4),
salary DECIMAL(8,2) DEFAULT 99999.99,
birthday DATE DEFAULT '1990-1-1',
deptId INT,
FOREIGN KEY(deptId) REFERENCES dept(did)
);
INSERT INTO emp
VALUES(1,'丁丁', 8000, DEFAULT, 10);
INSERT INTO emp(eid,ename,salary,deptId)
VALUES(6,'当当', 5000, 10);
INSERT INTO emp
VALUES(3,'豆豆', 3000, '1998-1-3', 10);
INSERT INTO emp
VALUES(4,'丫丫', 7000, '1998-1-4', 20);
INSERT INTO emp
VALUES(5,'明明', 9000, '1998-1-5', 30);
INSERT INTO emp
VALUES(2,'白白', 8500, '1998-1-6', NULL);