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 INTname 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 创建books3books格式一样 数据和属性都一样

       额外的表命令:          

                     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表中namehua

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

                  2RENAME 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)   id1 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');