mysql为结构化查询语言
数据库设计的范式:减小数据冗余或尽可能消除冗余的小active 规范
设计数据库:normal form 范式 维基百科上
约束:
主键 :primary key 定义字段主键,不容许重复,惟一性,只能有一个,不能为空
外键 :foreign key 定义表与表之间的 一个表中的字段在另外一表中必须出现--->引用完整性
惟一键:unique key 表中的某一字段不相同或为空
检查性:否字段定义范围,目前mysql不支持
候选键,key
sql语句类型:
DDL:数据的定义语言
DML:数据的操做语言
MCL:数据库控制语言
字段类型:INT 整型 1字节 BIGINT 8字节 TINYINT MEDIUMINT UNSIGNED
FLOAT 浮点型
BIT 位
DOUBLE 单精度
CHAR (10) 字符型 固定每一个字段就是10这么长 0-255
VARCHAR (10) 灵活性 长度与实际相符
BLOB 二进制存储数据 使用与长篇 TUNYBLOB
TEXT MEDIUMTEXT LONGTEXT
TIME 时间 3字节
DATE 日期 3字节
YEAR 年
DATETIME 时间日期 TIMESTAMP 占得空间小
yy-mm-dd hh:mm
ENUM 65535中组合,SET 最多64组合 枚举类型
boolean type 布尔类型
mysqld 是一个运行在服务端的进程,mysql是一个调用mysqld运行在客户端的命令行工具
客户端命令行:mysql >
建立表: create table 表名 (字段名 类型)
create table books ( id INT,name VARCHAR(255));
DESCRIBE books 查看表信息
CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ); 保存在依然能够建立 会有警告
CREATE TABLE books2 SELECT * from course WHERE id < 100 从另外表中建立 至关于复制 只会复制数据
CREATE TABLE books3 LIKE books; 建立books3和books格式同样 数据和属性都同样
额外的表命令:
COMMENT 显示注释信息
CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ) COMMENT 'books info';
DELAY_KEY_WRITE 加速
表数据的插入: insert into books values('01','xin');
insert into books values('01','xin'),('02','jing'); 批量插入
insert into books(name) values('long'),('jing') 单独为某一个字段插入数据
insert into books2 SELECT * FROM books; 查询已有表插入数据
insert into books set name='hua'; set插入数据
查看: select * from books
数据能够重复 要数据惟一性能够:
ALTER TABLE books ADD UNIQUE KEY (name);books表中name不容许重复
REPLACE insert into books(name) values('long') 至关于将内容覆盖从新写 能够实现修改某一个字段
表数据的修改: UPDATE books SET name=wei WHERE name=hua;
UPDATE books SET id=id+1 ORDER BY id LIMIT 3 排序并限定前3行加1
表数据的删除: DELETE FROM books WHERE name=hua;删除books表中name为hua的
sql语句的使用:
表:关系描述
修改表中已有的字段 :ALTER TABLE 表名 CHANGE 老字段 新字段 字段类型;
ALTER TABLE books CHANGE id id INT UNSIGNED;
ALTER TABLE books CHANGE id id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT数字自动加;
新增字段: ALTER TABLE books ADD intime DATETIME NOT NULL DEFAULT '
2011-02-11
'; 增长入库时间intime
ALTER TABLE books ADD pubtime DATETIME NOT NULL AFTER|FIRST name; 新曾一行到固定位置
删除字段: ALTER TABLE books intime
删除表: DROP TABLE books
清空表: TRUNCATE TABLE books
修改表名字:1、 ALTER TABLE books RENAME books2;
2、RENAME TABLE books2 TO books;
查看表信息: DESC TABLES;
查看表建立的过程:SHOW CREATE TABLE books
查询:支持正则表达式 逻辑表达式 &&(and) ||(or) 异或
SELECT 字段 AS 别名 FROM 表名 select name as BOOKS from books 重命名字段名并查询
SELECT DISTINCT startime FROM course;数据重复时只显示一行
范围内查询:
select * from course where id>1 and id<5
select * from course where id between 1 and 4 大于等于1小于等于4
select * from course where id in (1,2,4) id为1 、2、 4 的
like查询:
select * from course where course LIKE 'ha%' 以ha开头的数据
select * from course where course LIKE 'Li_rh033'
select * from course where
排序查询:
SELECT DISTINCT startime FROM course ORDEY BY startime 排序相同的显示一条记录
SELECT DISTINCT startime FROM course ORDEY BY startime DESC 降序排列
SELECT * FROM course GROUP BY startime 以startime分组
SELECT startime FROM course GROUP BY startime
SELECT startime FROM course GROUP BY startime HAVING COUNT(*)>1; 对分完组再进行限制输出
HAVING COUNT 要与GROUP BY 连用
聚合函数:HAVING COUNT
函数查询:
SELECT COUNT(*) FROM course 总的数据行数
SELECT MAX(id) FROM course id最大的 MIN 最小 AVG 平均
限制查询:
select * from course limit 2 显示前两行数据;
select * from course order by id desc limit 2; 后两行
select * from course order by id limit 2; 排序限制
select * from course order by id limit 2,2; 从第2行开始显示后两行
多表查询:
表 sru 数据 name age sex course course 数据 id course statime
sara 20 f 1 rh033
2011-08-08
terra 20 m 2 rh253
2011-05-08
tom 45 m 4 mysql
2011-08-12
交叉 :内链接 外链接 (左外 右外 自链接) UNION链接
UNION 将表链接起来 排序时要有括弧括起来:
(select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2);
(select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2) ORDER BY id;
交叉链接:
内链接:多个表中由相同的字段创建链接关系
select name, course.course from stu, course where stu.course=course.id;
select s.name, c.course from stu as s,course as c where s.course=c.id; 取别名
外链接:左外 join on 多个表
SELECT * FROM stu as s left join course as c on s.course=c.id;where age > 20;
右外 join on
SELECT * FROM stu as s right join course as c on s.course=c.id where s.sex='m';
自链接 inner join y 一个表中
select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2;
select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2 where s1.name <> s2.name;
子查询:多的查询条件 一个查询是针对另外一个查询的结果进行的
select name,course from stu where sex='m' and course=rh033;
select name from stu where course=(select id from course='luoyingfa') 等号后的查询的返回结果要为一个
select s1.name from (select * from stu where sex='m') as s1 where s1.course='2' from后用子查询要起别名
in 使用子查询:
select s.name from stu as s where s.course in (select id from course where course like 'L%');
select name from stu where course in (select id from course where startdate>'
2010-11-01
');