zoukankan      html  css  js  c++  java
  • MySQL笔记(五)MySQL 角色与SQL CHECK约束

    MySQL ROLE

    MySQL 8.0 Reference Manual  /  

    how to create role on MySQL database

    mysql 8.0 才支持角色。

    创建新角色:

    CREATE ROLE 'app_developer', 'app_read', 'app_write';

    将权限赋予角色:

    GRANT ALL ON app_db.* TO 'app_developer';
    GRANT SELECT ON app_db.* TO 'app_read';
    GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

    创建新用户:

    CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
    CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
    CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
    CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';

    将角色赋予用户:

    GRANT 'app_developer' TO 'dev1'@'localhost';
    GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
    GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';

    SQL CHECK 约束

    http://www.w3school.com.cn/sql/sql_check.asp

    MySQL关于check约束无效的解决办法

    没找到官方文档。查了下资料发现 MySQL 不支持 CHECK ,加不加都一样。。

    示例:

    DROP TABLE IF EXISTS employee;
    CREATE TABLE employee (
        name VARCHAR(50) NOT NULL,
        phone_num VARCHAR(20) NOT NULL,
        id CHAR(8),
        sex CHAR(1),
        
        PRIMARY KEY(id),
        
        CONSTRAINT check_sex CHECK (sex IN ('f', 'm')),
        CONSTRAINT check_id CHECK (id LIKE 'E_______')
        
    )    ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO employee
        (name, 
        phone_num, 
        id, 
        sex)
    VALUES
        ('李四',
        '15159000122',
        'E2008001',
        'f');
        
    DROP TABLE IF EXISTS product;
    CREATE TABLE product (
        name VARCHAR(50) NOT NULL,
        id CHAR(9),
        product_type VARCHAR(50) NOT NULL,
        production_date DATE,
        
        PRIMARY KEY(id),
        
        CONSTRAINT check_id CHECK (id LIKE 'P%'
        AND SUBSTRING(id, 2, 4) = YEAR(production_date))
        
    )    ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO product
        (name, 
        id, 
        product_type, 
        production_date)
    VALUES
        ('飞碟迷宫',
        'P20080021',
        '玩具',
        '2008-10-22');
    
    CREATE TABLE customer (
        name VARCHAR(50) NOT NULL,
        id CHAR(9),
        sex CHAR(1) NOT NULL,
        department VARCHAR(50) NOT NULL,
        salary VARCHAR(50) NOT NULL,
        job_title VARCHAR(50) NOT NULL,
        
        PRIMARY KEY(id),
        
        CONSTRAINT check_id CHECK (id LIKE 'C%')
        
    )    ENGINE=INNODB DEFAULT CHARSET=utf8;    
    
    CREATE TABLE order_master (
        id CHAR(12) PRIMARY KEY,
        customer_id CHAR(9) NOT NULL,
        employee_id CHAR(8) NOT NULL,
        total DECIMAL(8, 2) DEFAULT 0,
        -- order_date DATE DEFAULT CURDATE(), 这两行是错的,MySQL目前字段的默认值不支持函数
        -- shipping_date DATE DEFAULT CURDATE(), 另外一种解决方案是由应用程序插入默认值
        order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        -- shipping_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
        -- 或者是用触发器来做
        invoice_number VARCHAR(50) UNIQUE,
        
        FOREIGN KEY (customer_id) 
            REFERENCES customer(id),
        
        FOREIGN KEY (employee_id) 
            REFERENCES employee(id)        
    )    ENGINE=INNODB DEFAULT CHARSET=utf8;    
    
    CREATE TABLE order_detail (
        order_id CHAR(12) NOT NULL,
        product_id CHAR(9) NOT NULL,
        quantity INT NOT NULL,
        price DECIMAL(8, 2),
        
        FOREIGN KEY (order_id) 
            REFERENCES order_master(id),
        
        FOREIGN KEY (product_id) 
            REFERENCES product(id)    
    )    ENGINE=INNODB DEFAULT CHARSET=utf8;    
  • 相关阅读:
    java抽象类
    java不支持多继承
    logback颜色
    @ConfigurationProperties、@Value、@PropertySource
    redis命令
    mac下安装rabbitmq
    mac下安装jmeter
    python TypeError: 'int' object is not callable 问题解决
    白炽灯串联发光问题_高中知识(原创)
    python 离散序列 样本数伸缩(原创)
  • 原文地址:https://www.cnblogs.com/xkxf/p/9034862.html
Copyright © 2011-2022 走看看