mysql表的查询及表操做

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 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 ' 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 ');
相关文章
相关标签/搜索