zoukankan      html  css  js  c++  java
  • MySQL SQL常用语句

    MySQL语句

    SQL语句是结构化的查询语言,mysql接口程序只负责接受sql,传送给sql层

    SQL语句的种类:
    DDL:数据库对象定义语言
    DCL:数据库控制语言(grant revoke)
    DML:数据操作语言(update delete insert)
    DQL:数据查询语言(show、select)

    MySQL对象

    1、数据库对象

    • 能定义什么?
      • 库名
      • 库的基本属性(字符集、排序规则)
    • 如何定义?
      • create database [dbname]
      • create schema [dbname]

    1.创建数据库

    //创建库名为:case1和case2,以下两种方法功能一致
    mysql> create database case1;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> create schema case2;
    Query OK, 1 row affected (0.00 sec)
    

    2.创建数据库,指定字符集

    字符集:[DEFAULT] CHARACTER SET [=] charset_name
    排序规则:[DEFAULT] COLLATE [=] collation_name

    mysql> create database case3 character set utf8;
    Query OK, 1 row affected (0.01 sec)
    

    3.查看创建的数据库的语句

    mysql> show create database case3;
    +----------+----------------------------------------------------------------+
    | Database | Create Database                                                |
    +----------+----------------------------------------------------------------+
    | case3    | CREATE DATABASE `case3` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    +----------+----------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    4.删除数据库

    mysql> drop database case3;
    Query OK, 0 rows affected (0.01 sec)
    

    4.修改数据库字符集(字符集不要乱修改)

    mysql> alter database case1 charset utf8mb4;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show create  database case1;
    +----------+-------------------------------------------------------------------+
    | Database | Create Database                                                   |
    +----------+-------------------------------------------------------------------+
    | case1    | CREATE DATABASE `case1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
    +----------+-------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    2、表对象
    表数据:数据行
    表属性(源数据):表名、列名、列定义、数据类型、约束、特殊列属性、表索引信息

    • 能定义什么?
      • 定义表的属性
    • 如何定义?
      • create table t1(表结构)

    1.创建表,前提是要use到指定的数据库

    //切换case1数据库
    mysql> use case1
    Database changed
    
    //在case1数据库中创建表
    mysql> create table t1(
    id int(4) not null,
    name char(20) not null,
    age tinyint(2) NOT NULL default '0',
    dept varchar(16) default NULL
    );
    
    //查看case1数据库中的所有表
    mysql> show tables;
    +-----------------+
    | Tables_in_case1 |
    +-----------------+
    | t1              |
    +-----------------+
    1 row in set (0.00 sec)
    
    //查看表的结构
    mysql> desc t1;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(4)      | NO   |     | NULL    |       |
    | name  | char(20)    | NO   |     | NULL    |       |
    | age   | tinyint(2)  | NO   |     | 0       |       |
    | dept  | varchar(16) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)
    
    //查看创建的表的语句
    mysql> show create table t1;
    CREATE TABLE `t1` (
      `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=utf8mb4 |
    
    

    2.修改表中的列

    //在表中添加一列
    mysql> alter table t1 add age1 int;
    
    //在表中添加多列
    mysql> alter table t1 add bridate int, add gender enum('M','F');
    
    提示:以上方法都是在表的最后添加
    
    //在指定列后添加一列
    mysql> alter table t1 add stu_id int after id;
    
    //在表中最前添加一列
    mysql> alter table t1 add sid int first;
    
    //删除列,直接加表明,不需要数据类型
    mysql> alter table t1 drop sid;
    
    //修改列名
    mysql>alter table t1 change name stu_name char(20);
    
    //修改列的属性
    mysql> alter table t1 modify stu_name varchar(20);
    

    3.修改表名

    mysql> rename table t1 to stu;
    
    mysql> show tables;
    +-----------------+
    | Tables_in_case1 |
    +-----------------+
    | student         |
    +-----------------+
    1 row in set (0.00 sec)
    

    4.删除表

    mysql> drop table t1;
    

    insert用法

    insert语法:Insert into<表名>[(<字段名>[,..<字段名n>])] values(值1),[,(值n)]

    1.创建一个表,用于测试

    mysql> create database test;
    mysql> create table test.t1 (
      id int(4) NOT NULL AUTO_INCREMENT,
      name char(20) NOT NULL,
      PRIMARY KEY (id)
    );
    mysql> desc test.t1;
    +-------+----------+------+-----+---------+----------------+
    | Field | Type     | Null | Key | Default | Extra          |
    +-------+----------+------+-----+---------+----------------+
    | id    | int(4)   | NO   | PRI | NULL    | auto_increment |
    | name  | char(20) | NO   |     | NULL    |                |
    +-------+----------+------+-----+---------+----------------+
    

    2.insert实践

    //切换到test数据库
    mysql> use test;
    
    //插入一行数据,如果不指定列,就要按规矩为每列都插入恰当的值
    mysql> insert into t1 values(1,'zhangsan');
    
    //插入多行数据,整数需要用单引号引起来 '整数/字符串'
    mysql> insert into t1 values (2,'lisi'),(3,'wangwu'),(4,'maliu');
    
    //只针对name这个列插入数据,由于id列为自增的,所以可以只在name列插入值
    mysql> insert into t1(name) values ('xmh');
    
    //查看插入的结果
    mysql> select * from t1;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | wangwu   |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    5 rows in set (0.00 sec)
    
    //清空表数据(慎用)
    mysql> truncate table t1;
    

    补充强调:我们平时登录网站发帖子,发博文,实质上都是调用web网站的程序连接MySQL数据库,通过上述的insert语句把帖子博文数据存入数据库的。

    update用法

    update用于修改表中的数据
    命令语法:update 表名 set 字段=新值,… where 条件(一定要注意条件)

    1.查看表中的数据

    mysql> select * from t1;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | wangwu   |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    5 rows in set (0.01 sec)
    

    2.update实践

    //切换到test数据库
    mysql> use test;
    
    //修改表中id为3的行中的name为limao
    mysql> select * from t1 where id=3;
    mysql> update t1 set name='limao' where id=3;
    

    3.update危险命令

    //将表中name字段的的所有数据都更改(危险)
    mysql> update t1 set name='zhang33';
    
    //使用where条件,只更新id为1的行(推荐)
    mysql> update t1 set name='zhang55' where id=1;
    

    select用法

    select很强大,能查询用户,数据等

    命令语法:select<字段1,字段2, ...>from< 表名 >where<表达式>
    其中select,from,where 是不能随便改的,是关键字,支持大小写。

    1.查询数据

    //查询表中的所有数据
    mysql> select * from test.t1;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | limao    |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    
    //查询表中id为5的数据
    mysql> select * from test.t1 where id=5;
    +----+------+
    | id | name |
    +----+------+
    |  5 | xmh  |
    +----+------+
    

    2.查询mysql用户信息
    注意5.7版本查询密码不再是password,变更为了authentication_string

    mysql> select user,host,authentication_string from mysql.user;
    +---------------+-----------+-------------------------------------------+
    | user          | host      | authentication_string                     |
    +---------------+-----------+-------------------------------------------+
    | root          | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | guest         | 10.0.0.%  |                                           |
    | zabbix        | 10.0.0.%  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +---------------+-----------+-------------------------------------------+
    5 rows in set (0.00 sec)
    

    3.根据指定条件查询表中部分数据

    //1.指定行查询
    mysql> select * from t1 limit 2; #查询两行内容
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    +----+----------+
    
    mysql> select * from t1 limit 1,3; #从第1行开始查找,查找三行内容
    +----+-------+
    | id | name  |
    +----+-------+
    |  2 | lisi  |
    |  3 | limao |
    |  4 | maliu |
    +----+-------+
    
    
    //2.指定固定条件查询
    mysql> select * from t1 where id=1; #查找id为1的行
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    +----+----------+
    
    mysql> select * from t1 where name='xmh'; #查找name为xmh的行,注意单引号
    +----+------+
    | id | name |
    +----+------+
    |  5 | xmh  |
    +----+------+
    
    mysql> select * from t1 where id=2 and name="lisi"; #使用and 多固定条件查询,与的关系
    +----+------+
    | id | name |
    +----+------+
    |  2 | lisi |
    +----+------+
    
    mysql> select * from t1 where id=2 or name="xmh"; #使用and 多固定条件查询,或的关系
    +----+------+
    | id | name |
    +----+------+
    |  2 | lisi |
    |  5 | xmh  |
    +----+------+
    
    //3.按指定范围条件查找
    mysql> select * from t1 where id>2 and id<5; #多条件,取id大于2小于5的内容,则3-4行
    +----+-------+
    | id | name  |
    +----+-------+
    |  3 | limao |
    |  4 | maliu |
    +----+-------+
    
    mysql> select * from t1 where id>2 or id<5; #多条件,or 并集
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | limao    |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    

    4.其它查询功能

    //1.排序
    mysql> select * from t1 order by id ASC; #默认就是ASC
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | limao    |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    
    mysql> select * from t1 order by id DESC; 
    +----+----------+
    | id | name     |
    +----+----------+
    |  5 | xmh      |
    |  4 | maliu    |
    |  3 | limao    |
    |  2 | lisi     |
    |  1 | zhangsan |
    +----+----------+
    
    参数解释:
    ASC:从小到大排序(默认参数)
    DESC:从大到小排序
    

    delete用法

    delete用于删除表中的数据
    命令语法:delet from 表名 where 表名

    1.查看表中的数据

    mysql> select * from t1;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | zhangsan |
    |  2 | lisi     |
    |  3 | limao    |
    |  4 | maliu    |
    |  5 | xmh      |
    +----+----------+
    5 rows in set (0.00 sec)
    

    2.update实践

    //切换到test数据库
    mysql> use test;
    
    //删除表中id为1的行
    mysql> delete from t1 where id=1;
    
    //删除表中name为lisi的行
    mysql> delete from t1 where name='lisi';
    
    //删除表中所有行,比较危险,而且是一行一行的删除,删除速度慢
    mysql> delete from t1;
    
    //在物理上删除表中数据,删除速度比较快,但不容易恢复数据
    mysql> truncate table t1;
    

    Trunatertable和delete 的区别:

    1. trunatetable test; 删除速度更快,直接清空对应数据的物理文件。
    1. delete from test; 删除速度慢,逻辑清除,按行删除。
  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/jasonminghao/p/12359798.html
Copyright © 2011-2022 走看看