• mysql全面整理(用于复习、查阅)--正在更新


    Mysql学习

    1. 关键字与函数名称全部大写

    2. 数据库名称、表名称、字段名称全部小写

    3. SQL语句必须以分号结尾

    一、数据库基本操作

    1. 创建、查看数据库

    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
    # 其中{}中 DATABASE 和 SCHEMA 两个作用是一样的,一般是选择使用DATABASE,中括号可选
    # 普通创建数据库dzp的语句
    CREATE DATABASE dzp;

    mysql> CREATE DATABASE dzp1;
    Query OK, 1 row affected (0.03 sec)


    # 创建数据库成功后,查看数据库使用
    SHOW DATABASES;

    mysql> SHOW DATABASES;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | dzp |
    | dzp1 |
    | mysql |
    | performance_schema |
    | sys |
    +--------------------+
    6 rows in set (0.00 sec)

    mysql>



    # 如果已经连接了数据库,use dzp;想要查看当前数据库的话可以直接:
    select database()

    mysql> select database();
    +------------+
    | database() |
    +------------+
    | dzp1 |
    +------------+
    1 row in set (0.00 sec)

    mysql>

    练习1:

    # 已经存在一个数据库db1,如果这时候重复创建会报错
    CREATE DATABASE db1;
    ERROR 1007:database exists
    
    # 而如果加上IF NOT EXISTS,就不会报错,但是会有一个warning警告
    CREATE DATABASE IF NOT EXISTS db1;
    SHOW WARNINGS;

    练习2:

    CHARACTER SET 是设置数据库的编码,上面创建的时候没有设置,但是默认是会自带的,查看方式是直接查看我们创建数据库的命令,默认是latin1:

    SHOW CREATE DATABASE t1;

    现在创建一个手动指定编码方式的数据库

    CREATE DATABASE dzp2 CHARACTER SET latin1;

    SHOW CREATE DATABASE t2;
    # 查看到数据库的编码是latin1

    练习3:

    修改数据量编码

    ALTER {DATABASE | SCHMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name

    # 举例
    ALTER DATABASE t1 CHARACTER SET = utf8;
    # 重新查看数据库编码
    查看t1编码:
    SHOW CREATE DATABASE t1;
    # 可以看到数据库编码已经变为utf8

    2. 删除数据库

    DROP {DATABASE | SCHAMA} [IF EXISTS] db_name
    
    #下面是删除t1数据库
    DROP DATABASE dzp;
    # 成功,查看一下,已经没有数据库dzp了
    SHOW DATABSES;

    3. 查看数据库安装路径

    SHOW variables like "%datadir";

     

    4. 修改密码

    # 5.7.6以上版本:
    set password for 'root'@'localhost' = 'Password123';
    # 如果是想修改当前用户的密码就直接执行:
    set password = 'Password123';
    
    # 5.7.6以下版本:
    set password for 'root'@'localhost' = password('Password123');

     

     二、 数据类型

    1. 整型

    默认是有符号位的,如果想要表示无符号位比如年龄这个字段,肯定是没有负数的,可以加UNSINGED,即:

    age TINYINT UNSINGED

    2. 浮点型

    3. 日期类型

    在实际使用中,由于时区问题,时间类型不经常使用,而是用整型或者字符型来代替。以避免时区不同造成的问题

    4. 字符型

    # char(5)指定长度,如果没有达到执行长度则自动用空格补齐,假设现在存储的是abc不到5个字符串,则就会补空格"abc  "
    # varchar(5)则是按照实际长度来存,不会像char(5)这样补空格
    # ENUM('男','女')枚举值只能从枚举值里选择
    # SET('A','B','C'),可以选择AB,BC

    三、 数据表

    通过USE打开某个数据库,先查看有哪些数据库,SHOW DATABASES; 假设有一个t2数据库,打开t2数据库: USE t2;

    1. 创建数据表

    CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,......)
    #  小括号里写的是列名称和数据类型
    mysql> CREATE TABLE tb1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    );
    Query OK, 0 rows affected(0.25 sec)

    2. 查看数据表

    SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
    # 可选的FROM是可以查看其它数据库的表

    3. 查看数据表的创建命令

    SHOW CREATE TABLE tbl_name

    从以上结果可以看到,数据库的引擎是InnoDB

    4. 查看数据表结构

    SHOW COLUMNS FROM tbl_name;
    # 查看上面创建的表tb1结构,可以看到字段信息,字段类型等

     5. 插入记录INSERT

    INSERT [INTO] tbl_name [(col_name,...,...)] VALUES (val,...)
    举例:
    SHOW CLOUMNS FROM tb1;
    INSERT tb1 VALUES('dzp',30,12000);
    INSERT tb1 (username,salary) VALUES('lsy',10000);

    6. 记录查找SELECT

    SELECT expr,...,... FROM tbl_name;

    7. 空值与非空

    NULL, 字段值可以为空

    NOT NULL, 字段值禁止为空

    # 字段类型默认为空

    INSERT INTO tb3(username) VALUES('TOM1');

     

     8. 自动编号 AUTO_INCREMENT

    # AUTO_INCREMENT
    # 自动编号, 且必须与主键组合使用
    # 默认情况下, 起始值为1, 每次的增量为1
    # 必须和主键配合使用, 例子在下面的主键中

     9. 主键 PRIMARY KEY

    主键约束

    每张数据表只能存在一个主键

    主键保证记录的唯一性

    主键自动为 NOT NULL

    mysql> CREATE TABLE tb4(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30) NOT NULL
    );
    Query OK, 0 rows affected(0.27 sec)
    
    # 其中,AUTO_INCREMENT是自动编号, PRIMARY KEY是主键可以缩写成KEY
    
    SHOW COLUMNS FROM tb4;

    # 对这个表插入的时候不需要给主键赋值,因为设置了自动编号,主键可以单独的使用而不必须和自动编号一起使用
    INSERT tb4 VALUES('tom');
    INSERT tb4 (username) VALUES('SIXSIXSIX');
    INSERT tb4 (username) VALUES('old-big');
    # 注意要把字段名带上,不然会报错

    注意: 主键PRIMARY KEY不一定要和 自动编号 AUTO_INCREMENT 一起使用,可以单独使用。

    但是自动编号 AUTO_INCREMENT不能单独使用,一定要和主键一起使用才行

    10. 唯一约束 UNIQUE KEY

    唯一约束

    唯一约束可以保证记录的唯一性

    唯一约束的字段可以为空值(NULL)

    每张数据表可以存在多个唯一约束

    mysql> CREATE TABLE tb5(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> age TINYINT UNSIGNED
    );
    # 测试插入相同数据到唯一约束字段:
    
    # 查看字段信息,可以看到username字段是唯一约束字段
    SHOW COLUMNS FROM tb5;
    
    # 插入相同的值
    INSERT INTO tb5(username, age) VALUES('TOM',22);
    Query OK, 1 rows affected (0.03 sec)
    # 报错
    INSERT INTO tb5(username, age) VALUES('TOM',22);
    Duplicate entry 'TOM' for key 'username'

    11. 默认值 DEFUALT

    默认值

    当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

    # 创建数据表tb6
    mysql> CREATE TABLE tb6(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> sex ENUM('1','2','3') DEFAULT '3'
    );
    
    # 查看数据表tb6的字段信息
    # SHOW COLUMNS FROM tb6;
    
    # 测试插入一条没有配置sex的数据
    mysql> INSERT INTO tb6(username) VALUES('tom');
    
    # 然后查看记录, 可以看到字段sex字段自动赋值3
    mysql> SELECT * FROM tb6;

     四、 约束及修改数据表

    1. 外键约束

    约束保证数据的完整性和一致性

    约束分为表级约束和列级约束

    约束类型包括:

      NOT NULL (非空约束)

      PRIMARY KEY (主键约束)

      UNIQUE KEY (唯一约束)

      DEFAULT(默认约束)

      FOREIGN KEY(外键约束)

    前面都已经学过前4种约束了,现在开始学习外键约束

    FOREIGN KEY

    保持数据一致性,完整性

    实现一对一或者一对多的关系

     

     先创建一个父表,然后再创建一个子表users字段pid(即外键列)关联父表的id(即参照列)。

    这里pid字段的数据类型要注意和父表的id字段一样,例如不加UNSIGNED就会报错,或者数据类型改成BIGINT也会报错,不过如果字段类型是字符类型的时候可以不同!!记住数字情况下数据类型必行相同!!

    查看约束和索引

    SHOW INDEXES FROM tbl_name

    如下可以看到有一个id的索引(主键自动创建索引!记住)

     查看users的创建语句:SHOW CREATE TABLE users; 可以看到系统为我们创建的pid索引

     

    外键约束的参照操作

    上面的意思是,在更新父表的时候,字表是否也进行相应的操作

    实验:ON DELETE CASCADE父表删除会自动删除子表匹配的行,ON UPDATE CASCADE自然就是更新了。

    再创建一张子表users1,外键仍然选择是pid

    往父表provinces插入3条记录

    往子表users插入记录,其中的报错是因为外键7没有对应父表的id

     查看子表的内容:

    发现没id没有连续,这是因为我上面插入记录的时候有一条没有成功,但是id是已经自动创建了,所以记住,就算失败也会占用一个id

    现在开始删除父表provinces中的一条记录,id=2

    修改数据表

    1、添加单列:

    ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]

     可以看到添加的列到最后一列了,再加一列这次放在开头:

    2、添加多列

    ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,....)

    和添加单列语法一样只是用,逗号隔开每个多个添加列

     删除列:

     删除多列:

    同时删除和添加列:

    添加主键约束:

    唯一约束可以有多个,主键约束只有一个:

    添加唯一约束:

    添加外键约束:添加外键的字段,父表和子表的id数据类型要一致

     添加和删除默认约束

    删除主键约束:不用指定字段,因为主键约束是唯一的

     删除唯一约束或索引:

     

    删除外键,先查看创建表的语句,然后再删除外键

  • 相关阅读:
    CSS 3 中的多列属性
    CSS3 3D转换
    CC3中的2D转换
    ubuntu sudo: pip:找不到命令
    ubuntu 下更新pip后发生 ImportError: cannot import name 'main'的问题解决
    ubuntu 安装pip
    gradle下载
    L0,L1,L2正则化浅析
    安装使用离线版本的维基百科(Wikipedia)
    Linux中CPU亲和性(affinity)
  • 原文地址:https://www.cnblogs.com/dingzp/p/10928391.html
Copyright © 2020-2023  润新知