mysql为结构化查询语言<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
数据库设计的范式:减少数据冗余或尽量消除冗余的小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 '<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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');
转载于:https://blog.51cto.com/jingmu/508313