一、SQL语句

有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写。

mysql服务端软件帮我们管理好文件夹以及文件,前提是作为使用者需要下载mysql的客户端,或者其他模块来连接到mysql,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。

该语法即sql(Structured Query Language 即结构化查询语言),SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。

SQL语言分为3种类型:

1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER

2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT

3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

MySQL中建立的库其实就是文件夹。

语法(help create database)

CREATE DATABASE 数据库名 charset utf8;

数据库的命名规则

可以由字母、数字、下划线、@、#、$

区分大小写

唯一性

不能使用关键字如 create select

不能单独使用数字

最长128位

练习

create database testdb charset utf8;

数据库开发——MySQL——基本操作_mysql
可以发现,在MySQL的安装路径中的data目录里,多了一个文件夹:
数据库开发——MySQL——基本操作_字段名_02

drop database testdb;

数据库开发——MySQL——基本操作_数据类型_03
可以发现,data目录下的相应文件夹也不见了:
数据库开发——MySQL——基本操作_表名_04

更改库的编码:

alter database testdb charset gbk;

数据库开发——MySQL——基本操作_数据类型_05

查看当前创建的库:

show databases;

数据库开发——MySQL——基本操作_字段名_06
可以看到当前有五个数据库,但是我们看见data目录下只有四个文件夹,这是因为除了咱们创建的testdb之外的四个数据库都是系统数据库

information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等

performance_schema:MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象

mysql:授权库,主要存储系统用户的权限信息

sys:mysql5.7增加了sys系统数据库,通过这个库可以快速的了解系统的元数据信息,这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助

查看数据库详情:

show create database testdb;

数据库开发——MySQL——基本操作_数据类型_07

切换数据库操作:

use testdb;

数据库开发——MySQL——基本操作_数据库_08

表介绍

表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。

数据库开发——MySQL——基本操作_数据库_09

学号、姓名、专业、生日和手机号称为字段,其余的,一行内容称为一条记录。

创建表语法:

create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

注意:

  1. 在同一张表中,字段名是不能相同
  2. 宽度和约束条件可选
  3. 字段名和类型是必须的
create table people(id int, name char);

数据库开发——MySQL——基本操作_数据库_10

复制表

复制表结构+记录 (key不会复制: 主键、外键和索引)

create table new_service select * from service;

只复制表结构

select * from service where 1=2;        //条件为假,查不到任何记录
create table new1_service select * from service where 1=2;  
create table t4 like employees;

drop table people;

数据库开发——MySQL——基本操作_mysql_11

alter table people modify name char(3);

alter table people change name nickname char(5);

数据库开发——MySQL——基本操作_字段名_12
修改表结构

1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;
2. 增加字段
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                          ADD 字段名  数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
3. 删除字段
      ALTER TABLE 表名 
                          DROP 字段名;
4. 修改字段
      ALTER TABLE 表名 
                          MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

show tables;

数据库开发——MySQL——基本操作_字段名_13

查看表的数据类型

desc innodb_t1;

数据库开发——MySQL——基本操作_数据库_14

记录

insert into people values(1, "Alex"),(2, "Coco"),(3, "Bei");

数据库开发——MySQL——基本操作_数据类型_15

delete from people where id=3;

数据库开发——MySQL——基本操作_数据类型_16

update people set nickname="Baby" where id=3;

数据库开发——MySQL——基本操作_mysql_17

select * from people;

数据库开发——MySQL——基本操作_数据类型_18

示例

创建数据库

mysql> use db1;
Database changed

创建表

mysql> create table t1(
    -> id int,
    -> name varchar(50),
    -> sex enum("male", "female"),
    -> age int(3)
    -> );
Query OK, 0 rows affected (0.55 sec)

查看表描述

mysql> desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

插入数据

mysql> insert into t1 values
    -> (1, "Alex", "male", 19),
    -> (2, "Coco", "female", 19);
Query OK, 2 rows affected (0.17 sec)
Records: 2  Duplicates: 0  Warnings: 0

查询表内容

mysql> select * from t1
    -> ;
+------+------+--------+------+
| id   | name | sex    | age  |
+------+------+--------+------+
|    1 | Alex | male   |   19 |
|    2 | Coco | female |   19 |
+------+------+--------+------+
2 rows in set (0.00 sec)

只插入id数据并查询

mysql> insert into t1(id) values
    -> (3),
    -> (4);
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+------+--------+------+
| id   | name | sex    | age  |
+------+------+--------+------+
|    1 | Alex | male   |   19 |
|    2 | Coco | female |   19 |
|    3 | NULL | NULL   | NULL |
|    4 | NULL | NULL   | NULL |
+------+------+--------+------+
4 rows in set (0.00 sec)

查看表结构

mysql> show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL,
  `age` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)