一天學會MySQL(一)

时间:2020-03-27
本文章向大家介绍一天學會MySQL(一),主要包括一天學會MySQL(一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一天學會MySql

1.安裝MySql(ubuntu 16.04)

  • 安裝

    sudo apt-get update  #更新软件源
    sudo apt-get install mysql-server  #安装mysql
    
  • 启动和关闭mysql服务器

    service mysql start
    service mysql stop
    
  • 確認是否安裝成功

    sudo netstat -tap | grep mysql
    

    mysql节点处于LISTEN状态表示启动成功

  • 安裝可視化界面

    sudo apt-get install mysql-workbench
    

2.mysql的基本操作

  • 登錄數據庫

    mysql -uroot -p123  //123是密碼,沒有設置可不寫
    
  • 如何查看有什么数据库?

    SHOW DATABASES;
    
  • 如何选择数据库?

    USE databasesname;
    
  • 如何查看该数据库中有哪些表?

    SHOW TABLES;
    
  • 如何查询表中的数据?

    SELECT * FROM tablename;
    
  • 如何查询表中的某一條数据?

    SELECT * FROM tablename WHRER 條件;
    
  • 如何退出数据库服务器?

    exit; 
    或者
    ctrl+z
    
  • 如何在数据库服务器中创建自己的数据库?

    CREATE DATABASE databasesname;
    
  • 如何创建一个数据表? 创建一个pet表

    CREATE TABLE pet(
                       name VARCHAR(20),
                       owner VARCHAR(20),
                       specise VARCHAR(20),
                       sex CHAR(1),
                       brith DATE,
                       death DATE 
                     );
    
    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | name    | varchar(20) | YES  |     | NULL    |       | 
    | owner   | varchar(20) | YES  |     | NULL    |       |
    | specise | varchar(20) | YES  |     | NULL    |       |
    | sex     | char(1)     | YES  |     | NULL    |       |
    | birth   | date        | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    1.Field 字段
    2.Type類型(int,var,varchar)
    
  • 查看創建的數據表的結構

    DESCRIBE pet;
    
  • 如何插入数据?

     INSERT INTO pet VALUES('kk','cc','dog','1','1998-8-2',null);
     
     +------+-------+---------+------+------------+
    | name | owner | specise | sex  | birth      |
    +------+-------+---------+------+------------+
    | kk   | cc    | dog     | 1    | 1998-08-02 |
    +------+-------+---------+------+------------+
    
  • 常用數據類型

    在 MySQL 中,有三种主要的类型:Text(文本/字符串)、Number(数字)和 Date/Time(日期/时间)类型。

    Text(文本/字符串)類型:

    Number(数字)類型:

    Date/Time(日期/时间)类型:

  • 刪除數據

    DELETE FROM tablesName WHRER 条件;
    
  • 更改數據

    UPDATE tableName SET 字段1=值1,字段2=值2 ... WHERE 条件;
    

稍微總結一下數據庫的常用操作: 增刪改查

增(INSERT)/刪(DELETE)/改(UPDATE)/查/(SELECT)

強調一點,數據庫的操作語句也可以使用小寫,這使用大寫,是爲了與後面的自命名區分。

3.mysql的建表約束

  • 主鍵約束( PRIMARY KEY)

    能够唯一确定一张表中的一条记录,增加主键约束之后,就可以使得字段不重复而且不为空

    CREATE TABLE user(id INT PRIMARY KEY,name VARCHAR(20))
    
    运行DESCRIBE user1;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    

    PRIMARY KEY表示設置id爲主鍵,通過id來區分不同記錄,插入同樣id或者空id的記錄,都會報錯。

  • 聯合主鍵

    CREATE TABLE user2(
        id INT,
        name VARCHAR(20),
        password VARCHAR(20),
        PRIMARY KEY(id,name) 
    );
    
    运行DESCRIBE user2;
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id       | int(11)     | NO   | PRI | NULL    |       |
    | name     | varchar(20) | NO   | PRI | NULL    |       |
    | password | varchar(20) | YES  |     | NULL    |       |
    +----------+-------------+------+-----+---------+-------+
    
    INSERT INTO user2 VALUES (1,'老王','123456');
    INSERT INTO user2 VALUES (2,'老王','123456');
    
    +----+------+----------+
    | id | name | password |
    +----+------+----------+
    |  1 | 老王 | 123456   |
    |  2 | 老王 | 123456   |
    +----+------+----------+
    

    复合主键只要字段不全相同,可以允许重復.同時,聯合主鍵都不允許爲空。

  • 自增約束

    CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREAMENT, name VARCHAR(20));
    
    运行DESCRIBE user3;
    +-------+-------------+------+-----+---------+----------------+
    | Field | Type        | Null | Key | Default | Extra          |
    +-------+-------------+------+-----+---------+----------------+
    | id    | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(20) | YES  |     | NULL    |                |
    +-------+-------------+------+-----+---------+----------------+
    
    INSERT INTO user3(name) VALUES('张三');
    INSERT INTO user3(name) VALUES('李四');
    
    +----+------+
    | id | name |
    +----+------+
    |  1 | 张三 |
    |  2 | 李四 |
    +----+------+
    無需定义id值 隨着插入的記錄數遞增。
    
  • 建表之後增加主鍵約束

    CREATE TABLE user4(
        id INT,
        name VARCHAR(20)
    );
    
    运行DESCRIBE user4;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    加入主键约束:
    ALTER TABLE user4 ADD PRIMARY KEY(id);
    再次运行DESCRIBE user4;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    删除主键约束:
    ALERT TABLE user4 DROP PRIMARY KEY;
    运行DESCRIBE user4查看表结构:
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   |     | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    使用modify 修改字段.添加约束:
    ALTER TABLE user4 MODIFY id INT PRIMARY key;
    使用DESCRIBE user4 查看表结构:
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    给主键设置自增长:
    ALTER TABLE user4 MODIFY id INT AUTO_INCREMENT;
    运行 DESCRIBE user4 查看表结构:
    +-------+-------------+------+-----+---------+----------------+
    | Field | Type        | Null | Key | Default | Extra          |
    +-------+-------------+------+-----+---------+----------------+
    | id    | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(20) | YES  |     | NULL    |                |
    +-------+-------------+------+-----+---------+----------------+
    
    
  • 唯一主鍵約束

    CREATE TABLE user5(id INT,name VARCHAR(20));
    
    DESCRIBE user5;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    ALTER TABLE user5 ADD UNIQUE(name);
    
    DESCRIBE user5;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(20) | YES  | UNI | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    還有其他幾種設置唯一主鍵的方法:
    1.CREATE TABLE user5(id INT,name VARCHAR(20) UNIQUE);
    2.CREATE TABLE user5(id INT,name VARCHAR(20), UNIQUE(name));
    3.一次行創建多個唯一約束CREATE TABLE user5(id INT,name VARCHAR(20), UNIQUE(id,name));
    此時id和name不都重復就行。
    DESCRIBE user5;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  | MUL | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    4.ALTER TABLE user5 MODIFY name varchar(20) unique;
    
    刪除唯一主鍵約束:
    ALTER TABLE user5 DROP INDEX name;
    
  • 非空約束

    修飾的字段不能爲空

    CREATE TABLE user6 (id INT,NAME VARCHAR(20) NOT NULL);
    
    desc user6; 可以看到name不允許爲空。
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | NAME  | varchar(20) | NO   |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    下句沒有給name值,就會報錯。
    INSERT INTO user6 (id) VALUES(1);
    
    INSERT INTO user6 (name) VALUES('zhangsan');
    +------+----------+
    | id   | NAME     |
    +------+----------+
    |    1 | zhangsan |
    | NULL | zhangsan |
    +------+----------+
    id可以爲NULL,而NAME不允許。
    
    下面語句也可設置非空約束
    ALTER TABLE user6 MODIFY  id INT NOT NULL;
    
  • 默認約束

    如果沒有傳值,就會使用默認值

    CREATE TABLE user7(id INT,name VARCHAR(20),age INT DEFAULT 10); 設置age的默認值爲10.
    
    DESC user7;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(20) | YES  |     | NULL    |       |
    | age   | int(11)     | YES  |     | 10      |       |
    +-------+-------------+------+-----+---------+-------+
    
    插入:INSERT INTO user7 VALUES(1,'z');
    
    SELECT * FROM user7;
    +------+------+------+
    | id   | name | age  |
    +------+------+------+
    |  1   |   Z  |  10  |
    +------+------+------+
    
  • 外鍵約束

    涉及到兩個表:主表和副表
     
    父表
    CREATE TABLE user8(id INT PRIMARY KEY, name VARCHAR(10));
    
    DESC user8;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(10) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    
    INSERT INTO user8 VALUES (1,'一班');
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | 一班   |
    +----+--------+
    
    子表:
     CREATE TABLE user9(id INT PRIMARY KEY, name VARCHAR(10),class_id INT,FOREIGN KEY(class_id) REFERENCES user8(id));
     
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id       | int(11)     | NO   | PRI | NULL    |       |
    | name     | varchar(10) | YES  |     | NULL    |       |
    | class_id | int(11)     | YES  | MUL | NULL    |       |
    +----------+-------------+------+-----+---------+-------+
    
    注意:1.子表的class_id引用父表的id,父表中id沒有的值,在子表中是不可以使用的
         2.父表中的記錄被子表引用,父表是不能刪除的,
         例如:
         DELETE user8 WHERE name = 'zhangsan';
         出现:Cannot delete or update a parent row:不能删除主表中的行 
    

參考

1.https://blog.csdn.net/weixin_42209572/article/details/98983741

2.https://www.bilibili.com/video/BV1Vt411z7wy?p=9

原文地址:https://www.cnblogs.com/depth-perception/p/12582839.html