ToB企服应用市场:ToB评测及商务社交产业平台

标题: [MySQL初阶]MySQL(3)表的约束 [打印本页]

作者: 莫张周刘王    时间: 5 天前
标题: [MySQL初阶]MySQL(3)表的约束
标题:[MySQL初阶]MySQL(3)表的约束
@水墨不写bug




  


约束的本质
通过技术手段,倒逼步伐员插入准确的数据。反过来,站在MySQL的角度,凡是插入的数据,一定是符合约束的准确的数据。
约束的目的
保证数据的完整性和可预见性。

1. NULL / NOT NULL


示例
  1. CREATE TABLE users (
  2.     user_id INT PRIMARY KEY,
  3.     username VARCHAR(50) NOT NULL, -- 必填
  4.     email VARCHAR(100) NOT NULL,    -- 必填
  5.     phone VARCHAR(20) NULL,          -- 可选
  6.     other VARCHAR(20)          -- 可选默认为null
  7. );
复制代码

2. DEFAULT


示例
  1. CREATE TABLE IF NOT EXISTS orders (
  2.     order_id INT PRIMARY KEY,
  3.     status VARCHAR(20) DEFAULT 'pending', -- 默认状态
  4.     created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 自动记录时间
  5. );
复制代码

null\not null 与default辨析?

总的来说:not null和default相互补充,并不冲突。


3. COMMENT


示例
  1. CREATE TABLE employees (
  2.     employee_id INT PRIMARY KEY,
  3.     salary DECIMAL(10,2) COMMENT '税前工资,单位为人民币', -- 注释说明
  4.     password_hash VARCHAR(100) COMMENT '使用SHA-256加密的密码'
  5. );
复制代码
如何查看解释?

运行sql语句:
  1. show create table tb_name\G;
复制代码


4. ZEROFILL


示例
  1. CREATE TABLE members (
  2.     member_id INT PRIMARY KEY,
  3.     member_no INT(6) ZEROFILL -- 显示为6位,不足补零
  4. );
复制代码

5. PRIMARY KEY


示例
  1. CREATE TABLE products (
  2.     product_id INT PRIMARY KEY, -- 主键
  3.     name VARCHAR(100) NOT NULL,
  4.     price DECIMAL(10,2)
  5. );
复制代码
主键约束留意事项:


  1. alter table tb_name drop primary key;
复制代码

  1. alter table tb_name add primary key(col_name);--列名称
复制代码

  1. create table if not exists tb_name(
  2.         id int unsigned,
  3.         course_id int unsigned comment '课程编号',
  4.         score tinyint unsigned comment '课程成绩',
  5.         primary key(id,course_id) --设置复合主键
  6.         );
复制代码

6. AUTO_INCREMENT


示例
  1. CREATE TABLE articles (
  2.     article_id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键
  3.     title VARCHAR(200) NOT NULL,
  4.     content TEXT
  5. );
复制代码
自增长字段留意:


  1. select last_insert_id();
复制代码
索引的本质

多用部分空间(内存)来存储数据的位置信息(类似于书的目次)。 本质是:以时间换空间。

7. UNIQUE KEY


示例
  1. CREATE TABLE users (
  2.     user_id INT AUTO_INCREMENT PRIMARY KEY,
  3.     email VARCHAR(100) NOT NULL UNIQUE, -- 唯一且非空
  4.     phone VARCHAR(20) UNIQUE            -- 唯一但可为空
  5. );
复制代码
唯一键字段留意:



综合业务案例

用户表筹划
  1. CREATE TABLE users (
  2.     user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户唯一ID',
  3.     username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名(唯一)',
  4.     email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱(唯一)',
  5.     password VARCHAR(32) NOT NULL COMMENT '加密后的密码',
  6.     status ENUM('active', 'inactive') DEFAULT 'active' COMMENT '用户状态',
  7.     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  8.     member_no INT(6) ZEROFILL COMMENT '6位编号'
  9. );
复制代码
订单表筹划
  1. CREATE TABLE orders (
  2.     order_id INT AUTO_INCREMENT PRIMARY KEY,
  3.     user_id INT NOT NULL COMMENT '关联用户ID',
  4.     order_no VARCHAR(20) NOT NULL UNIQUE COMMENT '唯一订单号',
  5.     amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
  6.     created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  7. );
复制代码
根据以上两个简朴的表的筹划,我们就可以在此基础上实现订单和骑手送餐的代码逻辑,这就是mysql在实际业务中的应用。


完·~
转载请注明出处


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4