mysql数据库命令大全_数据库sql语句大全实例_mysql如何创建表
什么是 SQL
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
SQL 能做什么
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
RDBMS
- RDBMS 指的是关系型数据库管理系统。
- RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。
- RDBMS 中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成。
mysql 数据类型
数据类型 | 含义 |
---|---|
tinyint | 1个字节 范围(-128~127) |
smallint | 2个字节 范围(-32768~32767) |
mediumint | 3个字节 范围(-8388608~8388607) |
int | 4个字节 范围(-2147483648~2147483647) |
bigint | 8个字节 范围(+-9.22*10的18次方) |
float | 单精度浮点型 8位精度(4字节) |
double | 双精度浮点型 16位精度(8字节) |
decimal | 浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值 |
char | 固定长度,最多255个字符 |
varchar | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char和varchar:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
- char类型的字符串检索速度要比varchar类型的快。
varchar和text:
- varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
- text类型不能有默认值。
- varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
日期时间类型 | 含义 |
---|---|
date | 日期 ‘2020-11-11’ |
time | 时间 ’11:11:11′ |
datetime | 日期时间 ‘2020-11-11 11:11:11’ |
timestamp | 自动存储记录修改时间 1606187820 |
关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
UNIQUE | 唯一约束 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
FOREIGN KEY | 外键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name |
指定一个字符集 |
SQL DML 和 DDL
- 数据操作语言 (DML) 和 数据定义语言 (DDL)
- 常见的 DMLSELECT – 从数据库表中获取数据UPDATE – 更新数据库表中的数据DELETE – 从数据库表中删除数据INSERT INTO – 向数据库表中插入数据
- 常见的 DDLCREATE DATABASE – 创建新数据库ALTER DATABASE – 修改数据库CREATE TABLE – 创建新表ALTER TABLE – 变更(改变)数据库表DROP TABLE – 删除表CREATE INDEX – 创建索引(搜索键)DROP INDEX – 删除索引
mysql 认识
键(key): 表中用来识别特定列, 键的值在当前列中具有唯一性;(user_id)
表头(header): 每一列的名称(user_id, username, phone, gender);
列(row): 具有相同数据类型的数据的集合(user_id 的值);
行(col): 每一行用来描述某个人/物的具体信息(user_id, username, phone, gender 一行值);
值(value): 行的具体信息, 每个值必须与该列的数据类型相同;(username tom
)
使用 Docker 安装Mysql 数据库,可以查看 Docker 常用操作
进入 msyql 数据库
mysql -D <database_name> -h <hostname> -u <username> -p [<password>]
mysql -u <username> -p [<password>]
mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
.....
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
查看所有数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| sys |
+--------------------+
13 rows in set (0.02 sec)
创建数据库
# create database database_name [options];
mysql> create database shicimingju;
创建表
mysql> CREATE TABLE `shici_item` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`type` char(6) NOT NULL DEFAULT 'poetry' COMMENT '类型',
`poetry_author` char(10) NOT NULL DEFAULT '' COMMENT '诗词作者',
`poetry_num` char(10) NOT NULL DEFAULT '' COMMENT '诗词编号',
`poetry_name` varchar(100) NOT NULL DEFAULT '' COMMENT '诗词名称',
`poetry_content` longtext NOT NULL COMMENT '诗词内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
新增
# 插入一条数据
mysql> insert into shici_item values(null, "poetry", "佚名", "1", "《论语十则》", "曾子曰:士不可以不弘毅,任重而道远。");
mysql> insert into shici_item values(null, "poetry", "曹植", "1", "《七步诗》", "煮豆燃豆萁,豆在釜中泣。"),(null, "poetry", "钱起", "1", "《省试湘灵鼓瑟》", "曲终人不见,江上数峰青。");
删除
mysql> delete from shici_item where poetry_author='佚名' and poetry_num='1';
修改
mysql> insert into shici_item values(null, "poetry", "白居易", "1", "《重阳席上赋白菊》", "还似今朝歌酒席,白头翁入少年场。");
mysql> update shici_item set poetry_content="满园花菊郁金黄,中有孤丛色似霜。还似今朝歌酒席,白头翁入少年场。" where poetry_author="白居易" and poetry_num="1";
mysql> select * from shici_item where poetry_author="白居易" and poetry_num='1';
| id | type | poetry_author | poetry_num | poetry_name | poetry_content |
| 59 | poetry | 白居易 | 1 | 《长恨歌》 | 满园花菊郁金黄,中有孤丛色似霜。还似今朝歌酒席,白头翁入少年场。|
| 4214 | poetry | 白居易 | 1 | 《重阳席上赋白菊》| 满园花菊郁金黄,中有孤丛色似霜。还似今朝歌酒席,白头翁入少年场。|
2 rows in set (0.00 sec)
# 执行上边sql,发现改了两条记录; 改回去 sql
## 修改语句需要保证更新的条件唯一,不然会导致其他数据也会被更新
update shici_item set poetry_content="汉皇重色思倾国,御宇多年求不得。杨家有女初长成,养在深闺人未识。天生丽质难自弃,一朝选在君王侧。回眸一笑百媚生,六宫粉黛无颜色。春寒赐浴华清池,温泉水滑洗凝脂。侍儿扶起娇无力,始是新承恩泽时。云鬓花颜金步摇,芙蓉帐暖度春宵。春宵苦短日高起,从此君王不早朝。承欢侍宴无闲暇,春从春游夜专夜。后宫佳丽三千人,三千宠爱在一身。金屋妆成娇侍夜,玉楼宴罢醉和春。姊妹弟兄皆列土,可怜光采生门户。遂令天下父母心,不重生男重生女。骊宫高处入青云,仙乐风飘处处闻。缓歌慢舞凝丝竹,尽日君王看不足。渔阳鼙鼓动地来,惊破霓裳羽衣曲。九重城阙烟尘生,千乘万骑西南行。翠华摇摇行复止,西出都门百余里。六军不发无奈何,宛转蛾眉马前死。花钿委地无人收,翠翅金雀玉搔头。君王掩面救不得,回看血泪相和流。黄埃散漫风萧索,云栈萦纡登剑阁。峨嵋山下少人行,旌旗无光日色薄。蜀江水碧蜀山青,圣主朝朝暮暮情。行宫见月伤心色,夜雨闻铃肠断声。天旋地转回龙驭,到此踌躇不能去。马嵬坡下泥土中,不见玉颜空死处。君臣相顾尽沾衣,东望都门信马归。归来池苑皆依旧,太液芙蓉未央柳。芙蓉如面柳如眉,对此如何不泪垂。春风桃李花开夜,秋雨梧桐叶落时。西宫南苑多秋草,落叶满阶红不扫。梨园弟子白发新,椒房阿监青娥老。夕殿萤飞思悄然,孤灯挑尽未成眠。迟迟钟鼓初长夜,耿耿星河欲曙天。鸳鸯瓦冷霜华重,翡翠衾寒谁与共。悠悠生死别经年,魂魄不曾来入梦。临邛道士鸿都客,能以精诚致魂魄。为感君王辗转思,遂教方士殷勤觅。排空驭气奔如电,升天入地求之遍。上穷碧落下黄泉,两处茫茫皆不见。忽闻海上有仙山,山在虚无缥缈间。楼阁玲珑五云起,其中绰约多仙子。中有一人字太真,雪肤花貌参差是。金阙西厢叩玉扃,转教小玉报双成。闻道汉家天子使,九华帐里梦魂惊。揽衣推枕起徘徊,珠箔银屏迤逦开。云髻半偏新睡觉,花冠不整下堂来。风吹仙袂飘飖举,犹似霓裳羽衣舞。玉容寂寞泪阑干,梨花一枝春带雨。含情凝睇谢君王,一别音容两渺茫。昭阳殿里恩爱绝,蓬莱宫中日月长。回头下望人寰处,不见长安见尘雾。惟将旧物表深情,钿合金钗寄将去。钗留一股合一扇,钗擘黄金合分钿。但教心似金钿坚,天上人间会相见。临别殷勤重寄词,词中有誓两心知。七月七日长生殿,夜半无人私语时。在天愿作比翼鸟,在地愿为连理枝。天长地久有时尽,此恨绵绵无绝期。" where poetry_name="《长恨歌》" and poetry_author="白居易";
查询
# 查询所有数据
mysql> select * from shici_item;
# 分页查询 limit
mysql> select * from shici_item limit 1, 2;
# 查询指定字段
mysql> select poetry_author, poetry_name from shici_item;
# 根据 id 查询
mysql> select * from shici_item where id = 123;
# 查询 poetry_author 为李白的诗词
mysql> select poetry_author, poetry_name from shici_item where poetry_author='李白';
# 查询 poetry_author 为李白 和 poetry_num 为1 诗词
mysql> select poetry_author, poetry_name from shici_item where poetry_author='李白' and poetry_num='1';
# 模糊查询
mysql> select * from shici_item where poetry_content like "%黄河之水天上来%";
表操作
mysql> CREATE TABLE `user_info` (
`user_id` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '用户Id',
`username` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '用户名',
`phone` varchar(11) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '手机号',
`gender` char(1) COLLATE utf8_bin NOT NULL COMMENT '性别 male 1;female 2;un_known or hide 0',
`avatar` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '头像',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `uniq_phone` (`phone`),
UNIQUE KEY `uniq_user_id` (`user_id`),
UNIQUE KEY `uniq_username` (`username`),
KEY `idx_create_time` (`create_time`),
KEY `idx_update_time` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户信息表';
添加列
mysql> alter table <table_name> add <row_name> <data_type> [after <insert_position>];
mysql> alter table user_info add `email` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱' after avatar;
mysql> alter table user_info add `job` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '职位' after email;
mysql> alter table user_info add `address` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '地址' after job;
mysql> alter table user_info add `description` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '描述' after address;
mysql> desc user_info;
修改列
mysql> alter table <table_name> change <row_name> <new_row_name> <new_data_type>;
mysql> alter table user_info add `temp` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '临时添加' after description;
alter table user_info change `temp` `temp2` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '临时添加2';
删除列
mysql> alter table <table_name> drop <row_name>;
alter table user_info drop temp2;
重命名表名称
mysql> alter table shici_item rename poetry_item;
删除表
mysql> drop table <table_name>;
删除库
mysql> drop database <database_name>;
导入 sql 脚本
方法一:
mysql> create database abc;
mysql> source /path/to/shici_item.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -u root -p 123456 < shici_item.sql
转载请注明:XAMPP中文组官网 » 数据库sql语句大全实例_mysql如何创建表