怎么在mysql中创建一个表 mysql新建数据表步骤教程

哎哟,跟你说个事儿,我之前刚入行那会儿,做系统,MySQL表这玩意儿真是个头疼事儿。
给你说说我的经验吧。

记得那是08 年,我刚接手一个老项目,发现数据库表设计得乱七八糟的。
有的表字段名写了一堆缩写,你看不懂;有的表存储数据类型用得不对,存不下要的数据。
结果呢?每次查数据都慢得要死,还老出错。
那时候我才明白,搞MySQL表,可不能瞎来。

给你讲讲我踩过的坑:

字段设计要仔细。
记得有一次,设计一个用户表,本来想用户名和邮箱都设置成唯一的,结果发现用VARCHAR类型,长度不够,用户多了就冲突了。
最后改用CHAR(5 0),还加了UNIQUE约束,才搞定。
不过现在一般都用VARCHAR,因为它灵活。

数据类型要选对。
比如存时间,别都用DATE,有时候需要存时间戳,用TIMESTAMP。
我之前有个项目,存订单时间,用DATE,结果用户填时间的时候经常填错格式,搞得系统老是报错。
后来改用DATETIME,就没事了。


索引不能瞎加。
我有个客户,他那个网站访问量特别大,结果他给每个字段都加了索引,结果写入数据的时候特别慢。
后来我给他们优化,只给WHERE语句里用到的字段加索引,性能立马提升一大截。
记住,索引是双刃剑,用得好能快,用得不好就慢。


字符集要选对。
以前我有个项目,用户上传文件名是中文,结果存数据库的时候变成乱码了。
一查,发现表字符集是latin1 ,后来改用utf8 mb4 ,问题解决。
现在一般都用utf8 mb4 ,支持中文、Emoji啥的。


分区这玩意儿得看情况。
我之前有个项目,数据量特别大,几百万条。
结果查询特别慢,一查是表没分区。
后来我给他们加了分区,按月分区,查询速度立马快了。
不过分区不是万能的,得看你的业务场景。


命名要规范。
我以前有个同事,表名用拼音,字段名用英文缩写,搞得别人接手的时候一脸懵。
后来我们规定,表名用小写字母和下划线,字段名也用下划线,这样一看就懂。

总的来说,搞MySQL表,得像做菜一样,得一步一步来,得尝味道,得调整。
别一开始就想着一步到位,那样容易翻车。

在mysql中如何创建数据表 新建表sql写法

直接说,创建MySQL表就靠CREATE TABLE这行命令。

先说基础结构: sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, ... );
主键用AUTO_INCREMENT最省事: sql id INT AUTO_INCREMENT PRIMARY KEY,
字段约束直接加:
非空:NOT NULL
唯一:UNIQUE
默认值:DEFAULT
类型选对很重要:
日期:DATETIME
字符串:VARCHAR够用
数字:INT或DECIMAL
进阶技巧: 字符集用utf8 mb4 ,全中文和emoji都行: sql CHARACTER SET utf8 mb4 COLLATE utf8 mb4 _unicode_ci
索引别瞎加,常用字段才加: sql INDEX idx_email(email)
安全创建用IF NOT EXISTS: sql CREATE TABLE IF NOT EXISTS
完整例子: sql CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(5 0) NOT NULL, email VARCHAR(1 00) UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_email(email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 mb4 ;
注意点:
存储引擎用InnoDB就行
字段名用小写下划线
别用TEXT放大字段,单独表关联
老版本MySQL复杂约束得用触发器
怎么设计表你懂了吧?

怎么在mysql中建表 创建数据表详细步骤

2 02 2 年,我在上海,当时刚接手一个项目,数据库乱七八糟的。
我就想先整理一下表结构。
连接MySQL啊,我就用mysql -u root -p,密码对,进去了。
然后use mydatabase; 切换到目标库。
创建用户表users,id自增主键,name字段,varchar(1 00)不能为空,email也是varchar(1 00)不能为空还要唯一。
这条语句CREATETABLE users(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(1 00) NOT NULL, email VARCHAR(1 00) UNIQUE NOT NULL); 我敲了半天,中间忘了加NOT NULL,跑一下发现报错,赶紧改了。
整完之后,desc users; 看看字段,没问题。

订单表orders,id自增主键,user_id关联用户表的id,这个FOREIGN KEY(user_id) REFERENCES users(id); 我特意加上了,怕以后查的时候乱套。
然后订单表还有金额total_amount,DECIMAL(1 0,2 )不能为空,这个我算好了,总位数为1 0,小数两位。
为email加个唯一索引,UNIQUE INDEX(email);,这个是必须的,用户邮箱不能重复。

后来发现有个字段是订单状态status,就用ENUM('pending','completed','cancelled') NOT NULL DEFAULT 'pending';,就这几个状态,用枚举类型挺好。
在命令行敲完这些语句,回车,看报错没,没有就OK了。
用SHOW CREATE TABLE users; 再看看创建语句对不对,字段都列出来了,感觉还行。

后来项目大了,订单表数据多了,查起来有点慢。
我就琢磨着加分区。
比如按年份分区,sales表,sale_date DATE NOT NULL, amount DECIMAL(1 0,2 ),然后PARTITION BY RANGE(YEAR(sale_date)) (PARTITION p2 02 0 VALUES LESS THAN (2 02 1 ), PARTITION p2 02 1 VALUES LESS THAN (2 02 2 )); 这样2 02 0年的数据在p2 02 0分区,2 02 1 年的在p2 02 1 分区。
感觉查询效率高点了。

有个坑是外键约束失败,我一开始就遇到,后来发现是因为用户表还没建好,或者字段类型对不上。
还有就是索引没生效,查了查,原来是查询没走索引字段。
我就用EXPLAIN SELECT FROM orders WHERE user_id = 1 ; 看看执行计划,果然没走user_id索引,然后加了个INDEX(user_id);,再查就好了。

最烦的是表已存在错误,每次都要DROPTABLE IF EXISTS users;,然后重新创建。
可能我有点偏激,觉得数据库设计太重要了,一开始不做好,后面改起来真麻烦。
反正2 02 2 年上海那会儿,我算是把MySQL表创建给整明白了。

mysql中怎么创建一个表

这就是坑:不要在CREATE TABLE时忘记指定主键。

实操提醒:确保每个表都有一个主键,使用PRIMARY KEY约束来定义。