zoukankan      html  css  js  c++  java
  • SQL-结构化查询语言(1)

    一:数据查询语言(DQL),Data Query Language,用以从表中获取数据,确定数据怎样在程序中给出。SELECT是DQL中用的最多的!
    select user,host,password from mysql.user order by user asc;
    select user,host,password from mysql.user order by user desc;
    
    二:数据操作语言(DML),Data Manipulation Language,包括INSERT, UPDATE和DELETE。
    delete from mysql.user where user='myname';
    
    三:事物处理语言(TPL),它的语句能确保被DML语句影响的表的所有行及时得更新。TPL语句包括BEGIN, TRANSACTION, COMMIT和ROLLBACK。
    四:数据控制语言(DCL),DCL全称是Data Control Language,包括GRANT或REVOKE。
    五:数据定义语言(DDL),Data Definition Language,其语句包括create和DROP。
    六:指针控制语言(CCL),DECLARE CURSOR,FETECH INTO等
    最后可以总结为如下:

    SQL常见操作
    1:创建数据库
    create database myyang DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    show create database myyang;
    2:查看当前使用的数据库
    select database();
    select version();
    select user();
    select now();
    3:删除数据库
    drop database myyang;
    4:进入数据库
    use myyang;
    5:使用-e参数不进入数据库执行命令
    mysql -uroot -p123456 -e "show grants for myyang@localhost;" 
    6:回收权限
    REVOKE INSERT ON test.* FROM 'myyang'@'localhost';
    7:MySQL的权限
         1	SELECT, 
         2	INSERT,
         3	UPDATE, 
         4	DELETE, 
         5	CREATE, 
         6	DROP, 
         7	REFERENCES, 
         8	INDEX, 
         9	ALTER, 
        10	CREATE TEMPORARY TABLES, 
        11	LOCK TABLES, 
        12	EXECUTE, 
        13	CREATE VIEW, 
        14	SHOW VIEW, 
        15	CREATE ROUTINE, 
        16	ALTER ROUTINE, 
        17	EVENT, 
        18	TRIGGER
    8:建表示例
    create table student(id int(4) not null, name char(20) not null, age tinyint(2) not null default '0', dept varchar(16) default null) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    Markdown

    索引
    • 主键索引
    create table student2(
    id int(4) not null AUTO_INCREMENT,
    name char(20) not null,
    age tinyint(2) NOT NULL 
    dept varchar(16) default NULL,
    primary key(id),
    KEY index_name(name)
    );
    PS: primary key(id) 是主键
    KEY index_name(name) name字段普通索引
    alter table student2 drop primary key; 删除主键
    alter table student2 change id id int primary key auto_increment;
    利用alter命令修改id列为自增主键
    
    • 普通索引
    KEY index_name(name)
    index_name 是索引的名字
    name是创建普通索引的字段
    alter table student2 drop index index_name;删除索引
    alter table student2 add index index_name(name);添加索引
    对前n个字符简历索引
    create index index_dept on student2(dept(8));
    对dept列的前8个字符创建索引
    show index form student2;
    查看索引
    对表的多个字段创建联合索引
    create index ind_name_dept on student2(name,dept);
    ps:联合索引允许列上有自己的索引
    也可以使用drop来删除索引
    drop index ind_name_dept on student2;
    对多个列的前n个字符创建索引
    create index ind_name_dept on student(name(8),dept(10));
    联合索引是有前缀生效条件的
    index(a,b,c)仅a,ab,abc三个查询条件可以走索引,b,bc,ac,c等无法使用索引了
    
    • 唯一索引
    创建唯一索引,插入的时候必须唯一,多用于邮箱注册
    create unique index uni_index_name on student(name);
    
    索引列的创建及生效条件
    1. 索引占用系统空间,更新数据库时需要维护索引数据,索引并不是越多越好,更新频繁读取较少的表要少建立索引
    2. 索引一定要创建在where后的条件列上,而不是select后选择的数据列,尽量选择在唯一值多的大表上建立索引
    插入数据
    create table test(id int(4) not null AUTO_INCREMENT,name varchar(20) not null, PRIMARY KEY(id));
    1:指定所有列明然后给数据
    insert into test(id,name) values(1,'ob');
    2:由于主键是自增的,因此只需要给name列
    insert into test(name) values('oc');
    3:不指定列,必须按照列的对应一个一个给值,也不能省掉自增列
    insert into test values(3,'od');
    insert into test values(4,'oe'),(5,'of');
    
    备份数据库
    mysqldump -uroot -p123456 -B test > /opt/test.sql
    查看备份的sql语句
    grep -E -v "#|/|^$|--" /opt/test.sql
    dump是逻辑备份,把sql的数据以sql的命令形式导出
    
    查询数据
    select * from test;
    select id,name from test;
    ps:不建议用*
    查询两个
    select id,name from test limit 2;
    select id,name from test limit 0,2;从0开始查查询两个
    select id,name from test where id=1;
    select id,name from test where name='od';字符串类型的查询条件需要引号
    select id,name from test where name='od' and id=3; and代表两遍都要成立
    select id,name from test where name='od' or id=5;or代表或
    select id,name from test where id>2 and id<4;
    select id,name from test order by id asc; asc是升序
    select id,name from test order by id desc; desc是降序
    
    连表查询
    1:创建学生表
    mysql> create table student(
        -> Sno int(10) NOT NULL COMMENT '学号',
        -> Sname varchar(16) NOT NULL COMMENT '姓名',
        -> Ssex char(2) NOT NULL COMMENT '性别',
        -> Sage tinyint(2) NOT NULL default '0' COMMENT '学生年龄',
        -> Sdept varchar(16) default NULL COMMENT '学生所在系别',
        -> PRIMARY KEY (Sno),
        -> key index_Sname (Sname));
    2:创建课程表
    mysql> create table course(                                                      -> Cno int(10) NOT NULL COMMENT '课程号',
        -> Cname varchar(64) NOT NULL COMMENT '课程名',
        -> Ccredit tinyint(2) NOT NULL COMMENT '学分',
        -> PRIMARY KEY (Cno));
    3:选课表
    mysql> create table SC(
        -> SCid int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',
        -> Cno int(10) NOT NULL COMMENT '课程号',
        -> Sno int(10) NOT NULL COMMENT '学号',
        -> Grade tinyint(2) NOT NULL COMMENT '学生成绩',
        -> PRIMARY KEY (Scid));
    4:插入数据
    insert into student values(0001,'赵信','男',30,'计算机网络');
    insert into student values(0002,'盖伦','男',30,'Python');
    insert into student values(0003,'孙悟空','男',30,'Java');
    insert into student values(0004,'亚索','男',30,'Go');
    insert into student values(0005,'提莫','女',6,'.net');
    insert into student values(0006,'金克斯','女',6,'shell');
    
    insert into course values(1001,'Linux运维',3);
    insert into course values(1002,'Python开发',5);
    insert into course values(1003,'Java开发',4);
    insert into course values(1004,'.NET开发',4);
    insert into course values(1005,'Go开发',4);
    insert into course values(1006,'shell开发',3);
    
    insert into SC(Sno,Cno,Grade) values(0005,1004,9);
    insert into SC(Sno,Cno,Grade) values(0004,1003,6);
    insert into SC(Sno,Cno,Grade) values(0003,1002,1);
    insert into SC(Sno,Cno,Grade) values(0002,1001,3);
    insert into SC(Sno,Cno,Grade) values(0001,1005,6);
    insert into SC(Sno,Cno,Grade) values(0006,1006,6);
    
    5:连表查询
    select student.Sno,student.Sname,course.Cname,SC.Grade from student,course,SC where student.Sno=SC.Sno and course.Cno=SC.Cno order by Sno;
    
  • 相关阅读:
    面试题38:股票最大收益问题
    面试题37:字符串中的括号
    面试题36:罗马数和阿拉伯数的相互转换
    面试题35:大数(字符串)相乘
    面试题34:文本对齐
    面试题33:简化目录路径
    面试题32:字符串的通配符匹配
    并发调度的可串行性
    mysql limit查询(分页查询)探究
    通过宏定义将__declspec(dllexport)与__declspec(dllimport)的转化,实现库代码和使用代码使用同一份头文件
  • 原文地址:https://www.cnblogs.com/skymyyang/p/7154419.html
Copyright © 2011-2022 走看看