精华内容
下载资源
问答
  • mysql的语句大全
    千次阅读
    2021-02-06 13:17:13

    mysql语句大全

    1.创建数据库

    create database database_name;

    2.创建表

    create table table_name(

    列名 数据格式 ....

    ....

    );

    其中:

    auto_increment  自动增长

    primary key        主键

    default'值'          默认值

    not null            不能为空

    3.切换数据库

    use database_name;

    4.添加一条数据

    insert into table_name(列名1,列名2...) values(数据1,数据2....);

    5.添加多条数据

    insert into table_name(列名1,列名2...) values(数据1,数据2...),(数据1,数据2....);

    PS:如果是字符串形式的数据,要加单引号或双引号.

    6.查询数据

    select * from table_name; 查询表的全部数据

    select 列名,列名... from table_name; 查询表的部分列的数据

    select 列名,列名... from table_name where 列名="条件"; 准确的查询满足条件的部分列的数据

    select 列名,列名... from table_name where 列名 like  '%部分条件%'; 查询满足部分条件的部分列的数据

    select * from table_name where 列名="条件1" or 列名="条件2" ....;  查询满足条件1的所有列的数据,条件2的,....

    select * from table_name where 列名="条件1" and 列名="条件2" ....;  查询满足所有条件的所有列的数据

    select * from table_name where 列名 like '%部分条件1'% or 列名 like '%部分条件2%'  ....;  查询满足部分条件1的所有列的数据,部分条件2的,....

    select * from table_name where 列名 like '%部分条件1'% and 列名 like '%部分条件2%' ....;  查询满足所有部分条件的所有列的数据

    select  * from table_name where 列名 in ('条件1','条件2'....);  与第5条语法一样,更简单的写法

    select  * from table_name where 列名 not in ('条件1','条件2'....);  与上一个语法相反,查询除了条件1,条件2...以外所有数据

    7.更新数据

    update table_name set 列名= 数据 where 条件;  在满足条件的情况下修改数据

    update table_name set 列名1 = 数据,列名2 = 数据... where 条件;  在满足条件的情况下修改多条数据

    8.删除数据

    delete from table_name where 条件; 在满足条件的情况下删除数据

    9.删除数据库

    drop database database_name;

    更多相关内容
  • MySQL语句大全

    万次阅读 多人点赞 2021-06-28 10:29:20
    MySQL语句大全 一、基础 1.说明:创建数据库 create database database-name 2.说明:删除数据库 drop database dbname 3.说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 [not ...

    MySQL语句大全

    注:MySQL不区分大小写,所有符号必须使用英文格式下的

    一、DDL(对数据库和表的操作)

    1.创建数据库

    create database database-name

    2.删除数据库

    drop database dbname

    3.选择数据库

    use 数据库名

    4.创建新表

    create table tabname(
    字段名1 类型,
    字段名2 类型,
    字段名3 类型,…);
    例:CREATE TABLE student(
    stu_id INT,
    stu_name VARCHAR(10),
    stu_sex VARCHAR(1),
    stu_age INT,
    stu_class VARCHAR(20));

    5.根据已有的表创建新表

    A:create table 新表名 like 旧表名(使用旧表创建新表)
    B:create table 新表名 as select 列名1,列名2… from 旧表名 definition only

    6.删除表

    drop table tabname

    7.显示表的属性信息

    desc 表名

    8.增加一个列名

    alter table 表名 add 列名 类型
    指定列名后面添加列名
    alter table 表名 add 已有列名 after 列名 类型
    first:第一个,before:前一个,end:最后

    9.删除一个列名

    alter table 表名 drop 列名

    10.修改一个列名

    alter table 表名 change 旧列名 新列名 类型

    11.修改类型

    alter table 表名 modify 列名(已有) 新的类型

    12.添加主键

    Alter table 表名 add primary key(列名)
    删除主键:Alter table 表名 drop primary key(列名)

    13.添加外键

    alter table 表名 add foreign key(列名) references 表名(主键)
    删除外键:需要找到外键特有的名称

    14.约束类型

    ①not null:非空约束
    ②unique:唯一约束
    ③primary key:主键
    ④foreign key:外键
    ⑤auto_increment:自增长
    ⑥default:设置默认值 例:default ‘值’

    二、DQL(查询语句)

    关键字:

    1.or:或
    2.and:和
    3.having:分组后的附加条件
    4.group by:分组
    5.order by:排序:asc:正序,desc:倒序
    6.in:存在于某个值中
    7.not in:不存在与某个值中
    8.inner join … on链接多表
    9.left join … on:左外连接
    10.right join … on:右外连接
    11.left(right,inner) out join … on:去重
    12.count:计数
    13.AVG:平均值
    14.sum:求和
    15.max:最大值
    16.min:最小值
    17.like ‘关键字%’:取含有关键字的值
    18.distinct:去重
    19.round:四舍五入
    20.where 1=1:全选
    21.where 1=2:全不选
    22.limit 1,5:从第二行开始显示5条数据
    23.top 10:select top 10 * from 表名:显示前十条数据
    24.newid():随机

    1.选择查询:

    select * from 表名 where 范围

    2.完全查询:

    select * from 表名

    3.模糊查询:

    select * from 表名 where 列名 like ‘%value%’(查询包含value的值)

    4.排序查询(倒序,默认为正序):

    select * from 表名 order by 列名 desc

    5.计数查询:

    select count as 别名 from 表名

    6.求和查询:

    select sum(field) as 别名 from 表名

    7.平均值查询:

    select avg(filed) as 别名 from 表名

    8.最大值查询:

    select max(filed) as 别名 from 表名

    9.最小值查询:

    select min(filed) as 别名 from 表名

    10.四舍五入查询:

    select round(min(filed),要保留的小数位数) as 别名 from 表名

    11.去重查询:

    select distinct 列名 from 表名

    12.分组查询:

    select * from 表名 group by 列名

    13.多条件查询:

    select * from 表名 where 列名=‘范围’ and 列名=‘范围’

    14.不确定条件查询:

    select * from 表名 where 列名=‘范围’ or 列名=‘范围’

    15.多条件分组求值查询:

    select 列名,min(filed)from 表名 where 列名=‘范围’ group by 列名 having sum(列名)

    16.子查询(子查询的结果作为主查询的条件):

    select * from 表名 where=(select id from 表名 where 列名=‘范围’)

    17.连表查询(内连接):

    select * from 表名 inner join 表名 on 主键=外键(必须有主外键)

    18.连表查询(内连接)(去重):

    select * from 表名 inner out join 表名 on 主键=外键(必须有主外键)

    注:内连接只显示相关联的数据
    19.连表查询(左外连接)(显示左表的全部信息和右表相关联的信息):

    select * from 表名 left join 表名 on 主键=外键(必须有主外键)

    20.连表查询(右外连接)(显示右表的全部信息和左表相关联的信息):

    select * from 表名 right join 表名 on 主键=外键(必须有主外键)

    21.连表查询(全外连接)(显示两个表中的所有记录):

    select * from 表名 full/cross join 表名 on 主键=外键(必须有主外键)

    22.说明:几个高级查询运算词

    A:union(结合两个结果表并消除其中的重复行而派生出另一个表)
    例:select name from 表名1 union select name from 表名2(去除name的重复行)
    B:except(通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表)
    C:intersect(通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表)
    注:当这三个运算符与all一起使用时不消除重复行

    三、DML(数据操作语句:插入、修改、删除)

    1.数据插入

    完全插入:insert into 表名 values(值1,值2,值3,…)
    选择插入:insert into 表名(列名1,列名2,列名,3…) values(值1,值2,值3,…)
    批量插入:insert into 表名 values(值1,值2,值3,…),(值1,值2,值3,…),(值1,值2,值3,…)…
    注1:完全插入可以省略列名,但是值必须包含所有字段,批量插入类同
    注2:选择插入必须选择需要插入的字段,选择对应字段的值,批量插入类同

    2.修改语句

    update 表名 set 列名=‘值’ where 列名=‘范围’
    where 1=1(全选)
    where 1=2(全不选)
    注:不加where条件为修改所有指定列的值

    3.删除语句

    delete from 表名 where 列名=‘范围’
    注:不加where条件为删除所有的值

    展开全文
  • mysql语句大全.zip

    2020-01-16 16:53:15
    mysql语句大全.zip mysql语句大全.zip mysql语句大全.zip mysql语句大全.zip mysql语句大全.zip
  • 常用MySQL语句大全

    2019-07-23 02:02:21
    资源名称:常用MySQL语句大全资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
  • Mysql语句大全

    2012-08-02 10:53:38
    mysql的详细资料。
  • MySQL语句大全集锦+加详细解说(经典珍藏) MySQL语句大全集锦+加详细解说(经典珍藏)
  • MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全
  • mysql 语句大全

    2013-05-28 10:25:11
    mysql 语句大全 基本语法 提升 技巧 案例详解
  • mysql语句大全.docx

    2022-01-08 21:44:04
    mysql语句大全.docx
  • MySQL SQL查询语句大全集锦(经典珍藏),可以每天练习的
  • (MySQL语句大全pdf

    2015-12-21 18:26:30
    MySQL语句大全集锦pdf格式的,里面有详细解释,分享给大家。
  • Mysql语句大全总结

    2018-11-28 17:51:38
    Mysql语句大全总结
  • MySql语句大全

    2013-06-19 10:02:26
    最新的MySql语句大全!有啥资源共同分享!
  • MySQL 语句大全:创建、授权、查询、修改
  • MySQL常用SQL语句大全

    万次阅读 多人点赞 2017-12-21 19:22:28
    MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle、MS-SQL ,MySQL更拥有轻便、灵活、开发速度快的特色,更适用于中小型数据的存储与架构。MySQL之所以能够被数以万计的网站采用,也是...

    零、用户管理:

      1、新建用户:

        >CREATE USER name IDENTIFIED BY 'ssapdrow';

      2、更改密码:

        >SET PASSWORD FOR name=PASSWORD('fdddfd');

      3、权限管理

        >SHOW GRANTS FOR name;    //查看name用户权限

        >GRANT SELECT ON db_name.* TO name;    //给name用户db_name数据库的所有权限

        >REVOKE SELECT ON db_name.* TO name;    //GRANT的反操作,去除权限;

    一、数据库操作: 

      1、查看数据库:

        >SHOW DATABASES;

      2、创建数据库:

        >CREATE DATABASE db_name;  //db_name为数据库名

      3、使用数据库:

        >USE db_name;

      4、删除数据库:

        >DROP DATABASE db_name;

    二、创建表:

      1、创建表:

        >CREATE TABLE table_name(

        >id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,    //id值,无符号、非空、递增——唯一性,可做主键。

        >name VARCHAR(60) NOT NULL

        >score TINYINT UNSIGNED NOT NULL DEFAULT 0,    //设置默认列值

        >PRIMARY KEY(id)

        >)ENGINE=InnoDB    //设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索

        >DEFAULT charset=utf8;  //设置默认的编码,防止数据库中文乱码

        如果有条件的创建数据表还可以使用   >CREATE TABLE IF NOT EXISTS tb_name(........

      2、复制表:

        >CREATE TABLE tb_name2 SELECT * FROM tb_name;

        或者部分复制:

        >CREATE TABLE tb_name2 SELECT id,name FROM tb_name;

      3、创建临时表:

        >CREATE TEMPORARY TABLE tb_name(这里和创建普通表一样);

      4、查看数据库中可用的表:

        >SHOW TABLES;

      5、查看表的结构:

        >DESCRIBE tb_name;

        也可以使用:

        >SHOW COLUMNS in tb_name;     //from也可以

      6、删除表:

        >DROP [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ ,tb_name2.......];

        实例:

        >DROP TABLE IF EXISTS tb_name;

      7、表重命名:

        >RENAME TABLE name_old TO name_new;

        还可以使用:

        >ALTER TABLE name_old RENAME name_new;

    三、修改表:

      1、更改表结构:

        >ALTER TABLE tb_name ADD[CHANGE,RENAME,DROP] ...要更改的内容...

        实例:

        >ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;

        >ALTER TABLE tb_name DROP address;

        >ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;

    四、插入数据:

      1、插入数据:

        >INSERT INTO tb_name(id,name,score)VALUES(NULL,'张三',140),(NULL,'张四',178),(NULL,'张五',134);

        这里的插入多条数据直接在后边加上逗号,直接写入插入的数据即可;主键id是自增的列,可以不用写。

      2、插入检索出来的数据:

        >INSERT INTO tb_name(name,score) SELECT name,score FROM tb_name2;

    五、更新数据:

      1、指定更新数据:

        >UPDATE tb_name SET score=189 WHERE id=2;

        >UPDATE tablename SET columnName=NewValue [ WHERE condition ]

    六、删除数据:

      1、删除数据:

        >DELETE FROM tb_name WHERE id=3;

    七、条件控制:

      1、WHERE 语句:

        >SELECT * FROM tb_name WHERE id=3;

      2、HAVING 语句:

        >SELECT * FROM tb_name GROUP BY score HAVING count(*)>2

      3、相关条件控制符: 

        =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT

        AND 、OR

        Linke()用法中      %  为匹配任意、  _  匹配一个字符(可以是汉字)

        IS NULL 空值检测

     八、MySQL的正则表达式:

      1、Mysql支持REGEXP的正则表达式:

        >SELECT * FROM tb_name WHERE name REGEXP '^[A-D]'   //找出以A-D 为开头的name

      2、特殊字符需要转义。

     九、MySQL的一些函数:

      1、字符串链接——CONCAT()

        >SELECT CONCAT(name,'=>',score) FROM tb_name

      2、数学函数:

        AVG、SUM、MAX、MIN、COUNT;

      3、文本处理函数:

        TRIM、LOCATE、UPPER、LOWER、SUBSTRING

      4、运算符:

        +、-、*、\

      5、时间函数:

        DATE()、CURTIME()、DAY()、YEAR()、NOW().....

     十、分组查询:

       1、分组查询可以按照指定的列进行分组:

        >SELECT COUNT(*) FROM tb_name GROUP BY score HAVING COUNT(*)>1;

      2、条件使用Having;

      3、ORDER BY 排序:

        ORDER BY DESC|ASC    =>按数据的降序和升序排列

    十一、UNION规则——可以执行两个语句(可以去除重复行)

     十二、全文检索——MATCH和AGAINST

      1、SELECT MATCH(note_text)AGAINST('PICASO') FROM tb_name;

      2、InnoDB引擎不支持全文检索,MyISAM可以;

     十三、视图

      1、创建视图

        >CREATE VIEW name AS SELECT * FROM tb_name WHERE ~~ ORDER BY ~~;

      2、视图的特殊作用:

          a、简化表之间的联结(把联结写在select中);

          b、重新格式化输出检索的数据(TRIM,CONCAT等函数);

          c、过滤不想要的数据(select部分)

          d、使用视图计算字段值,如汇总这样的值。

     十四、使用存储过程:

      个人理解,存储过程就是一个自定义函数,有局部变量参数,可传入参数,可以返回值,不过这语法够呆滞的~~~

      1、创建存储过程:

        >CREATE PROCEDURE pro(

        >IN num INT,OUT total INT)

        >BEGIN

        >SELECT SUM(score) INTO total FROM tb_name WHERE id=num;

        >END;

       ***这里的  IN (传递一个值给存储过程),OUT(从存储过程传出一个值),INOUT(对存储过程传入、传出),INTO(保存变量)

      2、调用存储过程:

        >CALL pro(13,@total)      //这里的存储过程两个变量,一个是IN一个是OUT,这里的OUT也是需要写上的,不写会出错

        >SELECT @total         //这里就可以看到结果了;

      3、存储过程的其他操作:

        >SHOW PROCEDURE STATUS;      //显示当期的存储过程

        >DROP PROCEDURE pro;         //删除指定存储过程

    十五、使用游标:

      对这个理解不是很懂,朋友多多指点哦~~~

       1、游标的操作

        >CREATE PROCEDURE pro()

        >BEGIN 

        >DECLARE ordername CURSOR FOR

        >SELECT order_num FROM orders;

        >END;

        

        >OPEN ordername;    //打开游标

     

        >CLOSE ordername;    //关闭游标

    十六、触发器:

      触发器是指在进行某项指定操作时,触发触发器内指定的操作;

      1、支持触发器的语句有DELETE、INSERT、UPDATE,其他均不支持

      2、创建触发器:

        >CREATE TRIGGER trig AFTER INSERT ON ORDERS FOR EACH ROW SELECT NEW.orser_name;

        >INSERT语句,触发语句,返回一个值

      3、删除触发器

        >DROP TRIGGER trig;

    十七、语法整理:

      1、ALTER TABLE(修改表)

        ALTER TABLE table_name

        (  ADD    column  datatype    [ NULL | NOT NULL ]  [ CONSTRAINTS ]

           CHANGE  column   datatype   COLUMNS  [ NULL | NOT NULL ]   [ CONSTRAINTS ]

           DROP    column,

           。。。。

        )

      2、COMMIT(处理事务)

        >COMMIT;

       3、CREATE INDEX(在一个或多个列上创建索引)

        CREATE INDEX index_name ON tb_name (column [ ASC | DESC ] , .......);

       4、CREATE PROCEDURE (创建存储过程)

        CREATE PROCEDURE pro([ parameters ])

        BEGIN

        ........

        END

       5、CREATE TABLE(创建表)

        CREATE TABLE tb_name(

        column_name  datetype  [ NULL | NOT NULL ]   [ condtraints]   ,

        column_name  datetype  [ NULL | NOT NULL ]   [ condtraints]   ,

        .......

        PRIMARY KEY( column_name )

        )ENGINE=[  InnoDB | MyiSAM ]DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

       6、CREATE USER(创建用户)

        CREATE USER user_name [ @hostname ] [ IDENTIFIED BY [ PASSWORD ] 'pass_word' ];

       7、CREATE VIEW (在一个或多个表上创建视图)

        CREATE [ OR REPLACE ] VIEW view_name AS SELECT。。。。。。

       8、DELETE (从表中删除一行或多行)

        DELETE FROM table_name [WHERE ......]

       9、DROP(永久删除数据库及对象,如视图、索引等)

        DROP DATEBASE | INDEX | PROCEDURE | TABLE | TRIGGER | USER | VIEW  name

       10、INSERT (给表添加行)

        INSERT INTO tb_name [ ( columns,...... ) ]  VALUES(value1,............);

        使用SELECT值插入:

        INSERT INTO tb_name [ ( columns,...... ) ]

        SELECT columns , .......   FROM tb_name [ WHERE ...... ] ;

       11、ROLLBACK(撤销一个事务处理块)

        ROLLBACK [  TO  savapointname  ];

       12、SAVEPOINT(为ROLLBACK设置保留点)

        SAVEPOINT sp1;

       13、SELECT (检索数据,显示信息)

        SELECT column_name,.....FROM tb_name  [ WHERE ]   [ UNION ]    [ RROUP BY ]   [ HAVING ]   [ ORDER BY ]

       14、START TRANSACTION (一个新的事务处理块的开始)

        START TRANSACTION

       15、UPDATE(更新一个表中的一行或多行)

        UPDATE tb_name SET column=value,......[ where ]

    展开全文
  • 学习数据库的小伙伴不可错过
  • MySql常用语句汇总

    2022-06-15 09:57:15
    讲解了,MySQL中常用的语法,并且包含了使用实例。

    目录

    1.DDL数据库操作(dataBase definition language(数据定义语言)

    1.1.数据表操作

    2.DML数据库操作(dataBase Manipulation language(数据操作语言)

    3.DQL数据库操作(dataBase query language(数据查询语言))

    3.1数据表的关联关系

    3.2连接查询

     3.3子查询/嵌套查询

    4 存储过程

    4.1存储过程的创建

    4.2存储过程中流程控制

    4.3存储过程管理

    5 触发器(只有,insert/delete/update时才会触发)

    6 视图(由数据库中一张表或者多张表根据特定的条件查询出的数据构造成的虚拟表

    6.1 视图特性 

    6.2 视图操作

    7 索引(B+Tree)

    7.1创建索引

    7.2索引的使用


    1.DDL数据库操作(dataBase definition language(数据定义语言)


    ## 查看指定数据库创建时的sql指令

    show databases

    ## 查看指定数据库创建时的sql指令

    show create database graduation_wz

    ## 创建数据库

    create database graduation_wz

    ## 创建数据库 如果不存在

    create database if not exists graduation_wz

    ## 创建数据库 并设置编码

    CREATE database if not exists graduation_wz character set utf8

    ##删除数据库

    drop database if exists <dbname>

    ##使用数据库

    use <dbname>

    1.1.数据表操作

    ## 查看所有数据表

    SHOW TABLES

    ## 查看表的详情

    DESC <tableName>

    ## 删除表如果表存在

    DROP table if exists <tableName>

    ## 修改表名

    ALTER TABLE tb_store RENAME store

    ## 修改表的字符集,默认和数据库一样

    alter table store character set utf8

    ## 添加字段

    alter table store add store_type varchar(100)

    ## 删除字段

    alter table store drop column store_type

    ## 修改字段的类型

    alter table store modify store_states varchar(200)

    ## 修改字段的列名和类型

    alter table store change store_states states varchar(2)

    ## 删除表的主键约束

    alter table store drop primary key

    ## 删除表的外键约束 (删除需要带上外键名称)

    alter table store drop foreign key PK_STUDENT_CLASS

    ## 添加表的主键约束

    alter table store modify store_id varchar(32) primary key

    # 常见约束?
    # 1.非空约束(not null): 限制此列的值必须提供,不能为null
    # 2.唯一约束(unique): 在表中该列的值不能重复
    # 3.主键约束(primary key): 非空+唯一 能够唯一标识数据表中的一条数据
    # 4.外键约束(foreign key): 建立不同表之间的关联关系

    2.DML数据库操作(dataBase Manipulation language(数据操作语言)

    ## 插入语句
    insert into test values('1','张三')
    insert into test ( id ) values ('2')
    
    ## 删除语句
    delete from test
    
    ## 修改语句
    update test set id = '1',name = '李四' where id = '1'

    3.DQL数据库操作(dataBase query language(数据查询语言))

    ## 多条件查询连接关键字(and, or,not(取反))
    select * from test where id not between '1' and '2'
    
    ## 模糊查询(%表示任意多个字符,_表示一个字符)
    select * from test where name like '%李四'
    
    ## 查询去重复
    select distinct * from test
    
    ## 排序asc(升序) desc(降序)先按照id进行排序,如果id相同的再通过name排序
    select * from test order by id desc,name desc

    ## 日期函数
    ## 当我们向日期类型的列添加数据时,可以通过字符串类型赋值(字符串格式必须为yyyy-MM-dd hh:mm:ss)
    ## 获得当前时间 用 now() 或者 sysdate()

    ## 字符串函数

    ## upper()将字段的英文字母转化成大写 lower()将字段的英文字母转化成小写
    select upper(name) from test
    select lower(name) from test
    ## substring()截取字符串,concat(col,col)
    select substring(name,1,1) from test
    select concat(id,'-',name) from test

    ## 分组查询(group by)

    ## select 后使用 *,显示的是对分组查询后的每一组的第一条数据
    ## 只有出现 group by 时才可以使用 having(对分组后的数据进行过滤)
    select type,sum(id),avg(id),count(*) from test where id >= 1 group by type having count(*) > 1 order by id desc


    ## 分页查询(limit) 0 表示 数据的索引,3 表示 显示的条数

    select * from test limit 0 , 3

    3.1数据表的关联关系

    ## 一对一关联
    # 1.主键关联--两张数据表中主键相同的数据为相互对应的数据
    # 2.唯一外键--在任意一张表中添加一个字段添加外键约束与另一张表主键关联,并将外键添加唯一约束。

    ## 一对多,多对一
    # 1.设置外键--在多的一方表中添加一个字段添加外键约束与另一张表主键关联。

    ## 多对多
    # 1.新建关系表--在关系表中定义两个外键,分别与两个数据表的主键相关联。

    ## 外键的创建
    1.在创建表的时候创建

    create table class(
        class_id int primary key auto_incremment,
        class_name varchar(32) not null unique,
        class_remark varchar(200)
    )
    
    create table student(
        stu_num varchar(32) primary key,
        stu_name varchar(32) not null unique,
        cla_id int,
        constraint PK_STUDENT_CLASS foreign key(cla_id) references class(class_id)
    )


    2.创建好表后在给其添加外键

    alter table student add constraint FK_STUDENT_CLASS foreign key(cla_id) references class(class_id)

    3.外键约束-级联操作 在创建外键时 添加 级联操作

    on update cascade(级联修改)
    on delete cascade (级联删除)
    alter table student add constraint FK_STUDENT_CLASS foreign key(cla_id) references class(class_id) on update cascade on delete cascade

    3.2连接查询

    内连接查询(inner join)
    select * from student inner join class
    # 笛卡尔积(A表&B表):使A表中的每条记录和B表中的每条记录关联,笛卡尔积的总数 = A表记录的数量*B表记录的数量
    # 如果直接执行连接查询会生成两张表的笛卡尔积(即用student表中的每条记录去和class表中的每条记录相匹配)
    
    连接条件
    1.where:是在两张表产生笛卡尔积后,在通过条件来对生成的笛卡尔积进行筛选的(效率不高)
    select * from student inner join class where student.cls_id = class.class_id
    2.on : 通过on设置两张表进行连接查询的匹配条件(效率高)
    select * from student inner join class on student.cls_id = class.class_id 
     结果:只获取两张表中匹配条件成立的数据,任意一张表在另一张表,如果没有找到对应的匹配则不会出现在查询结果中
    
     #左连接 (left join)
    #结果:显示左边表中的所有数据,如果在右表中有对应的匹配关系,则进行匹配,如果右表中不存在匹配数据,则显示为null
    select * from student left join class on student.cla_id = class.class_id
    
    #右连接(right join)
    # 结果:显示右边表中的所有数据,如果在左表中有对应的匹配关系,则进行匹配,如果左表中不存在匹配数据,则显示为null
    select * from student right join class on student.cla_id = class.class_id

     3.3子查询/嵌套查询

    # 单列多行(作为查询条件)//查询所有在Java班级的同学
    select * from student where cla_id in (select class_id from class where class_name like 'java%')
    # 多行多列(作为虚拟表)//查询所有在java班并且性别是男的同学
    select * from (select * from student where cla_id in (select class_id from class where class_name like 'java%')) as t where t.stu_sex = '男'

    4 存储过程


    # 存储过程:将能够完成特定功能的SQL指令进行封装(SQL指令集),编译之后存储在数据库服务器上,并且为之取一个名字,客户端可以通过名字直接调用这个SQL指令集,获得执行结果。

    # 存储过程优点:
     1.SQL指令无需客户端编写,通过网络传送,可以节省网络开销,同时避免SQL指令在网络传输过程中被恶意篡改保证安全性;
     2.存储过程经过编译创建并保存在数据库中,执行过程无需重复进行编译,对SQL执行过程进行了性能优化。
    3.存储过程中多个SQL指令之间存在逻辑关系,支持流程控制语句,可以实现复杂的业务。

    #存储过程的缺点
    1.存储过程是根据不同的数据库进行编译,创建并存储在数据库中的,当我们需要更换数据库时,需要从新编写存储过程。
    2.存储过程受限于数据库产品,如果需要高性能的优化会成为一个问题。
    3.如果需要对数据库高并发访问,使用存储过程会增加数据库的连接执行时间(因为存储过程是把复杂的业务交给了数据库处理)

    4.1存储过程的创建

    # 创建一个加法的存储过程:
    create procedure add_num (in a int,in b int,out c int)
        begin
        set c = a + b;
        end 
    # 调用存储过程
    set @m = 0 ; -- 定义用户变量(全局变量) @m
    call add_num(3,2,@m) -- 调用存储过程获得结果赋值给@m
    select @m from dual; -- 参看变量值
    
    # 创建一个求输入值的 平方 和 一半相加的结果
    create procedure add_test (in int a,out int b)
        begin
        declare x int default 0; --定义局部变量
        declare y int default 0;
        set x = a * a;
        set y = a / 2;
        set b = x + y;
        end
    set @n = 0; --定义用户变量
    call add_test(6,@n);
    select @n from dual;
    
    # 创建一个求学生数量的总和(把查询结果赋值给变量)
    create procedure get_stuNum(out int c)
        begin
        select count(*) into c from student;
        end
    
    set @num = 0;
    call get_stuNum(@num)
    select @num from student

    # 局部变量:定义在存储过程中的变量,只能在存储过程内部使用。(必须定义在存储过程开始)
    # 用户变量:相当于全局变量,存放在mysql数据库的数据字典中(dual),使用set关键字直接定义,变量名要以@开头

    # 存储过程参数:in(入参),out(出参),inout(即可当入参,又可当出参)# 入参的用法 添加一名学生

    create procedure add_student(in stuNum varchar(32),in stuName varchar(32),in claId int,in stuSex varchar(2))
        begin
        insert into student values(stuNum,stuName,claId,stuSex);
        end
    
    call add_student('202202','李四','5','男')

    4.2存储过程中流程控制

    # 1.分支语句 if-then-else
    
    # 单分支语句
    create procedure proce_test ( in a int ) begin
        if
            a = 1 then
                insert into student    values    ( '202203', '王二', '5', '男' ) ;
            end if;
        end
    call proce_test(1)
    
    # 双分支语句
    create procedure proce_test2 ( in a int ) begin
        if
            a = 1 then
                insert into student    values ( '202204', '小红', '5', '女' );
            else insert into class values ( '2', 'mysql2022', '很棒' );
        end if;
        end
    
    # 2.多分支 case when
    create procedure proce_test2 (in a int) begin
        case a
            when 1 then
                insert into student    values ( '202204', '小红', '5', '女' );
            when 2 then
                insert into class values ( '2', 'mysql2022', '很棒' );
            else --如果不符合上面的条件就执行else中的
                insert into class values ( '2', 'mysql2022', '很棒' );
        end case;
    end;
    
    ## 循环语句
    # while循环 向class表中循环添加数据
    create procedure add_class(in num int)
        begin
        declare x int default 0;
        while 
            x < num do 
            insert into class(class_name,class_remark) values (concat('java',x),x);
        set x = x + 1;
        end while;
        end 
    
    # repeat循环 向class表中循环添加数据
    create procedure repeat_addClass(in num int)
        begin
        declare x int default 0;
        repeat 
            insert into class(class_name,class_remark) values (concat('c++',x),x);
            set x = x + 1;
        until i >= num     end repeat;
        end
    
    # loop循环 向class表中循环添加数据
    create procedure loop_addClass(in num int)
        begin
            declare x int default 0;
            myloop:loop
                insert into class(class_name,class_remark) values(concat('html',x),x);
                set x = x + 1;
                if x >= num then
                    leave myloop;
                end if;
            end loop;
        end

    4.3存储过程管理

    # 查看存储过程
    show procedure status where db = 'test'
    
    # 查看存储过程的创建细节
    show create procedure test.add_class
    
    # 删除存储过程
    drop procedure add_class;
    
    # 通过存储过程查询出一条数据
    create procedure find_one(in a int,out b varchar(32))
        begin
            declare id int default 0;
            declare name varchar(32) default '';
            declare remark varchar(32) default '';
            select class_id,class_name,class_remark into id,name,remark from class where class_id = a;
            set b = concat_ws('-',id,name,remark);
        end
    set @m = '';
    call find_one(1,@m);
    select @m from dual;
    
    # 通过游标查询多个结果集
    create procedure find_all(out result varchar(200))
        begin
            declare id int default 0;
            declare name varchar(32) default '';
            declare remark varchar(32) default '';
            declare num int default 0;
            declare x int default 0;
            declare str varchar(32) default '';
            declare mycursor cursor for select * from class;
            select count(*) into num from class;
            open mycursor;
                while x < num do
                    fetch mycursor into id,name,remark;
                    set str = concat_ws('-',id,name,remark);
                    set result = concat_ws(',',result,str);
                    set x = x + 1;
                end while;
            close mycursor;
        end
        
    set @m = '';
    call find_all(@m);
    select @m from dual

    5 触发器(只有,insert/delete/update时才会触发)

    # 触发器,就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能,存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。

    # 触发器的定义
    create trigger <trigger_name>
        <before|after>           --定义触发时机
        <insert|delete|update>   --定义DML类型
        ON <table_name>          --监听那个表
        for each row             --声明为行级触发器(只要操作一条记录就触发触发器执行一次)
        sql_statement            --触发后要执行的操作
    
    # 创建一个触发器(当向学生表中添加信息时向日志表中插入一条日志)
    create trigger insert_trigger before insert on student for each row
        insert into student_log values (now(),concat('添加',new.stu_name,'学生信息'));
    
    # 创建一个触发器(当向学生表中更新信息时向日志表中插入一条日志)
    create trigger update_trigger before update on student for each row
        insert into student_log values (now(),concat('将',old.stu_name,'改为',new.stu_name))
    
    # 创建一个触发器(当向学生表中删除信息时向日志表中插入一条日志)
    create trigger delete_trigger after delete on student for each row 
        insert into student_log values (now(),concat('删除',old.stu_name,'学生信息'))
    
    # 查看触发器
    show triggers
    
    # 删除触发器
    drop trigger <trigger_name>

    6 视图(由数据库中一张表或者多张表根据特定的条件查询出的数据构造成的虚拟表

    ## 视图的作用
    # 1安全性:如果我们直接将数据库表授权给用户,那么用户可以CRUD数据表中的所有数据,我们可以把表中公开的部分数据生成视图,授权用户访问视图,用户通过访问视图,获得公开的数据,从而达到将数据库表中的部分数据对用户隐藏。
    # 2简单性:如果我们需要查询的数据来源于多张数据表,可以使用多表连接查询来实现,通过视图将这些连表的查询结果对用户开放,用户可以通过查询视图获取多表数据,操作更便捷。# 创建视图

    create view <view_name>
        as
        select_statement
    
    # 创建一个查看所有学生信息和班级信息的视图
    create view v_student 
        as
        select s.stu_num,s.stu_name,c.class_name,c.class_remark from student s left join class c on s.cla_id = c.class_id

    6.1 视图特性 


     1.如果视图是通过查询一个表产生的可以有(增删改查)
     2.如果视图是都过多张数据表产生的就只可以(查询)

    单表视图时:在视图中添加数据,数据会被添加到源数据表,删除数据时,原表数据也会被删除,修改数据时,原表数据也会被修改。

    视图使用建议:对复杂查询简化操作,并且不会对数据进行修改的情况下使用视图。

    # 查看视图 desc <view_name>

    6.2 视图操作

    # 修改视图
    # 方式一:
        create or replace view v_student
            as
            select * from student;
    # 方式二:
        alter view v_student
            as
            select * from student;
    
    # 删除视图(删除视图时,不会删除原表数据)
    drop view v_student

    7 索引(B+Tree)

    #索引:就是将数据表中的某一列/某几列的值取出来构造成便于查找的结构进行存储,生成数据表的目录当我们进行数据查询的时候,则先在(目录)中进行查找得到对应的数据地址,然后再到数据表中根据地址快速的获取数据记录,避免全表扫描。

    mysql索引分类:
    1.主键索引:在数据库表的主键字段创建的索引,这个字段必须被primary_key修饰,每张表只能有一个主键。
     2.唯一索引:在数据库表中的唯一列创建的索引(unique),此列的所有值只能出现一次,可以为null。
    3.普通索引:在普通字段上创建的索引,没有唯一性的限制。
    4.组合索引:两个及以上字段联合起来创建的索引。

    --说明--
     1.在创建数据表时,将字段声明为主键(添加主键约束),会自动在主键字段创建主键索引。
    2.在创建数据表时,将字段声明为唯一键(添加唯一约束),会自动在唯一字段创建唯一索引。 

    7.1创建索引

    # 1.唯一索引
    -- 创建唯一索引:创建唯一索引列的值不能重复
    -- create unique index <index_name> on 表名(列名)
    create unique index index_stuName on student(stu_name)
    
    # 2.普通索引
    --创建普通索引:不要求创建索引列值的唯一性
    -- create index <index_name> on 表名(列名)
    create index index_stuSex on student(stu_sex)
    
    # 3.组合索引
    --创建组合索引
    -- create index <index_name> on 表名(列名,列名)
    create index indexStuNumOrStuName on student(stu_num,stu_name)
    
    # 4.全文索引
    --create fulltext index <index_name> on 表明(字段名)

    7.2索引的使用


    使用:索引创建完成后无需调用,当根据创建索引的列进行数据查询时,会自动使用索引。
    (重点):组合索引需要根据创建索引的所以字段进行查询时触发。

    # 在命令行窗口查看查询语句的查询规划
    explain select * from student where stu_num = '202201'\G;
    
    # 查看索引
    # 1.命令行查看
    show create table student\G;
    # 2.查看数据库索引
    show indexes from <table_name>;
    # 3.查询索引
    show keys from student;
    
    # 删除索引
    drop index index_stuName on student;

    # SQL的转义字符是:’(单引号)
    # 再sql中查询 值为'5'的列
    ''5''等于 '5'
    select * from student where name = '''5'''

    展开全文
  • ALTER TABLE:添加,修改,删除表的列,约束等表的定义。查看列:desc 表名;修改表名:alter table t_book rename to bbb;添加列:alter table 表名 add column ...修改列名MySQL: alter table bbb change nnnnn...
  • MySQL SQL语句大全集锦+加详细解说(经典珍藏)
  • Mysql查询语句大全

    千次阅读 多人点赞 2022-01-16 14:23:41
    解析:从 student 表中查询第三行到第五行的记录,但要注意的是 0 表示第一行记录,也是从 0 开始 ## 嵌套查询 语法:嵌套查询也就是在查询语句中包含有子查询语句,所以叫嵌套查询,没有单独的语法,嵌套子查询...
  • MySQL语法语句大全[归类].pdf
  • MySQL查询语句大全集锦.
  • 该笔记记录了详细的mysql各个知识点,包括数据的类型,表的创建及操作,数据库的创建和操作,...以及平时需要使用到的各种数据库语句,可以说该笔记集合了学习及提供mysql语句于一体的功能,让你免去自己写sql的操作。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,054,838
精华内容 421,935
关键字:

mysql的语句大全

mysql 订阅