MySQL常用语法

1.什么是数据库?

一个装数据的大容器,有数据文件,日志文件,DBMS(数据库管理软件)

2.数据库是用来做什么的?

存储数据的

3.有哪几个数据库?

DB2 
ORACLE 
SQL Server
mySql

4.SQL语言分类

DDL语句:数据定义语言
    create(创建),drop(移除),alter(改变)等
    对数据库,表,索引等数据对象进行定义
DML语句:数据操作语言
    insert(添加)
    update(修改)
    delete(删除)
    select(查询)

DCL语句:数据控制语言
    主要控制数据库,表,字段,用户的访问权限和安全级别的授予

5.DDL语句

注意:每一条语句后面都要跟分号(;)或\g结束,或者ctrl+c

1.创建数据库语法:

create databases 数据库名称

代码示例:

mysql> create database lanqiao;
Query OK, 1 row affected (0.00 sec)

mysql> show databases
    -> \g

测试结果:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| lanqiao            |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)
  • information_schema:注意存储了数据中存储的数据库对象,比如用户表,列的信息。权限信息,字符集信息
  • mySql:存储系统的用户权限
  • world:测试案例表

2.选择数据库语法

use 数据库名称

代码测试:

mysql> use lanqiao;
Database changed

3.显示数据库中所有表语法

show tables;

4.删除数据库语法

drop database 数据库名称

代码测试:

mysql> drop database lanqiao
    -> \g
Query OK, 0 rows affected (0.03 sec)

数据库删除后,下面的所有的表都被删除

5.创建表语法

create table 表名(
列名1:列的类型
列名2:列的类型
列名3:列的类型

)

代码测试:

 mysql> create table emp(
    -> ename varchar(10),
    -> hiredate date,
    -> sal int,
    -> deptno int
    -> );
    Query OK, 0 rows affected (0.18 sec)
  • 一个表相当一个类,列名相当类的属性
  • 表名:等价于文件的名称可以为任意目录
  • 列名:表头
  • 列的类型:int , char,varchar ....
  • 注意:创建表的时候需要先选中数据库,就是制定将表创建到那个数据库中

6.显示表结构(desc语法)

代码测试:

mysql> desc emp
       -> \g

测试结果

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ename    | varchar(10) | YES  |     | NULL    |       |
| hiredate | date        | YES  |     | NULL    |       |
| sal      | int(11)     | YES  |     | NULL    |       |
| deptno   | int(11)     | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

7.显示创建表的语法

show create table emp;

测试代码:

mysql> show create table employ;

8.删除表

drop table 表名

9.修改列的类型语法

alter table 表名 modify 列名 列的类型;

测试代码:

mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

10.添加列语法

alter table 表名 add column 列名 类型;

测试代码:

mysql> alter table emp add age int(3);
Query OK, 0 rows affected (0.24 sec)
Records: 0  Duplicates: 0  Warnings: 0

11.删除表的列:

alter table 表名 drop 列名;

测试代码:

mysql> alter table emp drop age;
Query OK, 0 rows affected (0.29 sec)
Records: 0  Duplicates: 0  Warnings: 0

12.修改列的名称

语法:
alter table 表名 change 原始名称 新的名称 列的类型;

测试代码:

mysql> alter table emp change ename name varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

注意:

  • change和modify都可以修改表的定义
  • change后面需要写2次列名,不方便
  • 但是change的优点可以修改列的名称,modify不可以

13.表改名

语法:

alter table 表名 rename 新表名

代码:

mysql> alter table emp rename example;
Query OK, 0 rows affected (0.10 sec)

14.修改列的排列顺序

DML语句

DML是操作对数据库中表记录的操作
主要表的记录操作有:
插入(insert)
查询(select)
删除(delete)
更改(update)

1.插入(insert)一次添加多条

语法:

insert into tablename(列名1,列名2.....列名n)
,(值1,值2.......值n),
,(值1,值2.......值n),
,(值1,值2.......值n);

代码:

mysql> insert into example(name,age,date)values('csw',10,'1');
Query OK, 1 row affected (0.04 sec)

对于含可空列的,非空但是含有默认值的字段,自增字段,可以不用在insert后添加列名,values后面直接对应列就行

代码:

mysql> insert into emp(name)values('guang');
Query OK, 1 row affected (0.03 sec)

mysql> select * from emp;
+-------+------+------+
| name  | age  | date |
+-------+------+------+
| csw   |   10 | 1    |
| guang | NULL | NULL |
+-------+------+------+
2 rows in set (0.00 sec)

表结构(允许列为空):
+------+
| Null |
+------+
| YES  |
| YES  |
| YES  |
+------+

2.更改(update)

语法:

update 表名 set 列名1 = 值1,列名2 = 值2...列名n = 值n;
对表中的数据,可以通过update命令进行修改

代码:

mysql> update csw set  name = '关头强';
Query OK, 4 rows affected (0.04 sec)
Rows matched: 4  Changed: 4  Warnings: 0
//一般都会加上where语句

代码:

mysql> update csw set sal = '1000' where name = '关头强';
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4  Changed: 4  Warnings: 0

代码:

mysql> select * from csw;

结果:

+-----------+-----------+------+-------+
| name      | hiredate  | sal  | depno |
+-----------+-----------+------+-------+
| 关头强    | 2017-4-15 | 1000 | 1000  |
| 关头强    | 2080-5-1  | 1000 | NULL  |
| 关头强    | 2080-5-1  | 1000 | NULL  |
| 关头强    | 2001-1-1  | 1000 | NULL  |
+-----------+-----------+------+-------+
4 rows in set (0.00 sec)

由于没有加where条件,所以将所有的name都修改了。而下面是只修改了depno=1000那一项

代码:

mysql> update csw set sal = sal+500 where depno = 1000;
Query OK, 1 row affected (0.14 sec)
Rows matched: 1  Changed: 1  Warnings: 0

结果:

mysql> select * from csw;
+-----------+-----------+------+-------+
| name      | hiredate  | sal  | depno |
+-----------+-----------+------+-------+
| 关头强    | 2017-4-15 | 1500 | 1000  |
| 关头强    | 2080-5-1  | 1000 | NULL  |
| 关头强    | 2080-5-1  | 1000 | NULL  |
| 关头强    | 2001-1-1  | 1000 | NULL  |
+-----------+-----------+------+-------+
4 rows in set (0.00 sec)

修改表中多列的数据:

        mysql> update emp set sal = 3000,deptno = 1 where name = 'aaa';
        Query OK, 1 row affected (0.04 sec)
        Rows matched: 1  Changed: 1  Warnings: 0
        
        mysql> select * from emp;

结果:

        +-------+------------+------+--------+
        | name  | hiredate   | sal  | deptno |
        +-------+------------+------+--------+
        | admin | 1999-09-09 | 1500 |      1 |
        | wuyu  | 2014-08-09 | 2000 |      2 |
        | aaa   | NULL       | 3000 |      1 |
        +-------+------------+------+--------+
        3 rows in set (0.00 sec)

3.删除(delete)

语法:

delete from tablename [where condition]

代码:

mysql> delete from csw where sal = '1000';
Query OK, 3 rows affected (0.03 sec)

结果:

mysql> select * from csw;
+-----------+-----------+------+-------+
| name      | hiredate  | sal  | depno |
+-----------+-----------+------+-------+
| 关头强    | 2017-4-15 | 1500 | 1000  |
+-----------+-----------+------+-------+
1 row in set (0.00 sec)

注意:如果不加条件会把表的所有信息删除

4.查询(select)

数据插入到表中,就可以使用select命令进行各式各样的查询
mysql> select * from csw;
+-----------+-----------+------+-------+
| name      | hiredate  | sal  | depno |
+-----------+-----------+------+-------+
| qiang     | 2017-4-15 | 3000 | 1000  |
| 小强      | 2080-5-1  | NULL | NULL  |
| 小强      | 2080-5-1  | NULL | NULL  |
| 打不死    | 2001-1-1  | NULL | NULL  |
+-----------+-----------+------+-------+

*表示要将所有的列信息全部显示出来.

    mysql> select name,sal from emp;
    +-------+------+
    | name  | sal  |
    +-------+------+
    | admin | 2000 |
    | wuyu  | 2000 |
    +-------+------+
    2 rows in set (0.00 sec)

注意:性能问题,推荐写列名,不要使用*号

5.查询不重复的记录.distinct 去除重复.###

    mysql> select * from dept;
    +--------+----------+
    | deptno | deptname |
    +--------+----------+
    |      1 | aa       |
    |      2 | aa       |
    |      3 | bb       |
    |      4 | cc       |
    +--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select distinct deptname from dept;
    +----------+
    | deptname |
    +----------+
    | aa       |
    | bb       |
    | cc       |
    +----------+
    3 rows in set (0.04 sec)

6.条件查询 where关键字可以显示用户指定的数据

逻辑运算符:

    =,>,<,>=,<=,!=,<>

测试语句:

    mysql> select * from dept where deptno > 2;
    +--------+----------+
    | deptno | deptname |
    +--------+----------+
    |      3 | bb       |
    |      4 | cc       |
    +--------+----------+
    2 rows in set (0.00 sec)

    逻辑运算符(or,and)
    mysql> select * from dept where deptno = 1 or deptname = 'cc';
    +--------+----------+
    | deptno | deptname |
    +--------+----------+
    |      1 | aa       |
    |      4 | cc       |
    +--------+----------+
    2 rows in set (0.02 sec)
    
    mysql> select * from emp where name ='admin' and sal >1000;
    +-------+------------+------+--------+
    | name  | hiredate   | sal  | deptno |
    +-------+------------+------+--------+
    | admin | 1999-09-09 | 2000 |      1 |
    +-------+------------+------+--------+
    1 row in set (0.00 sec)

重点 : 排序(order by)

语法:

    select * from 表名 [where 条件] [order by 列名1[desc|asc],列名2 [desc|asc]....列名n [desc|asc]]
    
    desc : 降序
    asc : 升序

语句:

    mysql> select * from emp order by sal desc ,deptno desc;
    +-------+------------+------+--------+
    | name  | hiredate   | sal  | deptno |
    +-------+------------+------+--------+
    | wuyu  | 2014-08-09 | 2000 |      2 |
    | admin | 1999-09-09 | 2000 |      1 |
    | wwwaa | NULL       | 1000 |      3 |
    +-------+------------+------+--------+
    3 rows in set (0.00 sec)

DCL语句

1.主要是DBA用来管理系统中的对象权限.

    创建一个数据库用户wuyu,具有对lq数据库中所有表的查询和添加权限.
    mysql> grant select,insert on lq.* to 'wuyu'@'localhost' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.22 sec)

    C:\Users\Administrator>mysql -uwuyu -p123
    mysql -u用户名 -p密码

2.MySQL支持的数据类型

    1. 数值类型
        1. integer      java int
        2. smallint     32767~65535
        3. decimal,dec(m,d) 和doublt范围相同 
        4. float
        5. real  不知道
        6. double
        7. money
    2. 字符类型
        1. char         0~255 之间的字符
        2. varcahr      0~65535的字符  
        3. text         65535
        4. longtext     ~~~~~~
        5. VARBINARY(M) 可以存储多少M的字节.
    3. 日期和时间
        1. date         yyyy-mm-dd
        2. datetime     yyyy-mm-dd hh:MM:ss
        3. timestamp    时间戳
        4. time         hh:MM:ss
        5. year         yyyy

MySQL的左连接与右连接:http://www.jianshu.com/p/57e49960abb4

你可能感兴趣的:(MySQL常用语法)