• 常用sql语句


    查看数据库列表:show databases;
    选中要使用的数据库:use 数据库名;
    查看数据库中表信息:show tables;
    查看表结构:desc 表名; 或者 show columns from 表名;
    查看系统配置参数 SHOW VARIABLES LIKE '***'

    1.创建table

    1 DROP TABLE IF EXISTS student;
    2 CREATE TABLE student
    3 (
    4 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    5 `name` VARCHAR(48) NOT NULL,
    6 `age` BIGINT NULL DEFAULT 1,
    7 PRIMARY KEY(`id` ,`age`)
    8 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    2.修改table

    添加字段  1 ALTER TABLE student ADD `tearcherId` INT UNSIGNED NOT NULL;  

    修改字段  1 ALTER TABLE student MODIFY `tearcherId` INT UNSIGNED NULL;  

    删除字段  1 ALTER TABLE student DROP `tearcherId` ;  

    添加外键约束  1 ALTER TABLE `student` ADD CONSTRAINT `class_fk` FOREIGN KEY (`class_id`) REFERENCES class_info(`id`); 

    3.删除表

    清空表内容  1 TRUNCATE TABLE student; 

    删除表  1 DROP TABLE student ; 

    4.数据操作 

    插入数据  1 INSERT INTO student (`name`,`age`) VALUES( 'zhangsan',25); 

    更新数据  

    1 UPDATE student SET company='电信' WHERE id IN (1,3,5);

    删除数据  1 DELETE FROM student WHERE id =10 AND age>100; 

    查询数据 :在学生表中,按包含学生数量来划分公司并倒序排列,最后返回包含学生数目第二多的公司名称机器包含的学生数量

    1 SELECT COUNT(*) AS count, company FROM student GROUP BY company HAVING count>=2 ORDER BY count DESC LIMIT 1,1;  

    5.查询性能提升

    通常查询语句中各关键字执行顺序为   select--from--where--group by--having--order by -- limit offert

    a.小表优先能极大减少比对次数 效率更好。例子:a表1条记录  b表10000条记录   连接条件是a.id = b.id,

     6.索引操作

    6.1普通索引操作

    普通索引创建: 1 CREATE INDEX company_index ON student(company(10));    

    注意,这里的长度10是索引长度。在MyISAM表中,创建组合索引时,创建的索引长度不能超过1000。
    
    对于CHAR和VARCHAR列,只用一列的一部分就可创建索引。创建索引时,使用col_name(length)语法,对前缀编制索引。前缀包括每列值的前length个字符。BLOB和TEXT列也可以编制索引,但是必须给出前缀长度。
    

      

    普通索引添加: 1 ALTER table tableName ADD INDEX indexName(columnName) 

    普通索引删除: 1 DROP INDEX [indexName] ON mytable;  

    6.2唯一索引操作

    唯一索引创建: 1 CREATE UNIQUE INDEX indexName ON mytable(username(length))  

    唯一索引添加:

    1 ALTER table mytable ADD UNIQUE [indexName] (username(length))

    6.3 主键索引和全文索引

    操作与普通索引类似,区别就是关键字不同。INDEX, UNIQUE,  PRIMARY KEy ,FULLTEXT

    7.存储过程

    创建:

    1  CREATE PROCEDURE `get_studenet_by_age`(IN `age` int)
    2  BEGIN
    3      #Routine body goes here...
    4   declare bottom_range INTEGER(12);  
    5   SET bottom_range=5;
    6   SELECT stud.id,stud.`name` from student as stud WHERE stud.age>age-bottom_range;
    7  END;

    调用: 1 CALL get_studenet_by_age(22) 

    8.自定义函数

     创建 :

    1 CREATE DEFINER = `root`@`localhost` FUNCTION `NewProc`(`age` int)
    2  RETURNS varchar(11)
    3 begin
    4        return 'SELECT stud.`name` from student as stud WHERE stud.age>age';
    5 end;

    调用: 1 SELECT * FROM student WHERE `name`=get_name_by_age(20); 

    9.触发器:

    包括INSERT DELETE UPDATE和定时触发器 

    创建语法如下:

    create trigger 名称 after|before 事件 insert|update|delete  on 表名  for each row

    两个关键字: new, old  在触发器中,当触发事件发生时,

    new : 代表新行, old: 代表旧行

    insert 操作: 成功之后,其后会自动产生一行新的数据. 在触发器中通过new获取新行字段值

    delete 操作, 其成功之后, 对旧行数据进行删除,在触发器中可以通过old获取旧行字段值

    update操作: 其会对原有的旧行,更新为新行. 既有新行又有旧行

     创建INSERT 触发器:

    1 CREATE TRIGGER trigger_student_count_insert
    2 AFTER INSERT
    3 ON student FOR EACH ROW
    4 UPDATE class_info SET student_count =student_count+1;

     创建DELETE 触发器:

    1 CREATE TRIGGER trigger_student_count_delete
    2 AFTER DELETE
    3 ON student FOR EACH ROW
    4 UPDATE class_info SET student_count=student_count-1;

     创建UPDATE触发器:

    1 create trigger tg3 after update on tb_order for each row
    2 begin
    3     update tb_goods  set inv = inv + old.num - new.num where  id = old.pid;
    4 end;

    10.事件调度器

    事件调度器有时也可称为临时触发器(temporal triggers),是基于特定时间周期触发来执行某些任务

    创建

    1 CREATE EVENT e_test
    2 ON SCHEDULE EVERY 1 DAY
    4 DO CALL get_studenet_by_age(25);

    11.视图

    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。修改view中的数据,同样会在table中生效
    优点:视图能简化用户操作  2.视图使用户能以多种角度看待同一数据  3.视图能够对机密数据提供安全保护 

    缺点:不支持触发器

    创建 : 1 CREATE VIEW V_VIEW1(ID, NAME, SEX, AGE,DEPARTMENT) AS SELECT ID, NAME, SEX, AGE,DEPARTMENT FROM learning.t_employee; 

    使用: 1 SELECT * FROM V_VIEW1 

  • 相关阅读:
    pcr的简单小脚本
    Q宠大乐斗自动玩
    Docker安装elsearch
    elasticserarch6.5.0百度云资源
    rabbitmq安装
    排序后分组取每个分组的第一条数据
    Lambda表达式的简单使用
    解决SpringBoot总是找不到jsp
    Java强转类型时报错
    iOS内购图文流程(2017)
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7905133.html
Copyright © 2020-2023  润新知