Mysql-基础命令
2022/5/31 2:22:42
本文主要是介绍Mysql-基础命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mysql基础命令
1.mysql命令分类
数据定义语言(DDL)
DDL全称是Data Definition Language,即数据定义语言,定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,比如表、聚簇、索引、视图、函数、存储过程和触发器等等。
数据操纵语言(DML)
数据操纵语言全程是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。
数据查询语言(DQL)
数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句
数据控制语言(DCL)
数据控制语言:Data Control Language。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。
比如常见的授权、取消授权、回滚、提交等等操作。
SQL语言:DDL、DML、DQL、DCL详解
2. mysql 数据类型
2.1 数值类型
MySQL 支持所有标准 SQL 数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。
作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值,绝对精度数 |
2.2 日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
2.3 字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
MySQL 数据类型 | 菜鸟教程 (runoob.com)
2.4 数据类型的属性
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
UNIQUE KEY | 唯一键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
mysql 数据类型 - 心随所遇 - 博客园
主键与唯一键的区别:
共同点:字段值唯一,不允许有重复的值
不同点:一个表中只能有一个主键,但可以有多个唯一键。
主键字段中不允许有NULL值,唯一键是允许有多个null值
3. mysql数据库的基础操作
在使用sql语句的时候,注意每个语句后必须有分号。
3.1 查询库与表
##1.查看已有数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) ##2.查看数据库中的表 ##先切换库 mysql> use employees; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed ##在查看表 mysql> show tables; +----------------------+ | Tables_in_employees | +----------------------+ | current_dept_emp | | departments | | dept_emp | | dept_emp_latest_date | | dept_manager | | employees | | salaries | | titles | +----------------------+ 8 rows in set (0.00 sec) ##3.查询表结构 ##以表格形式展示表结构 mysql> describe employees; +------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | emp_no | int(11) | NO | PRI | NULL | | | birth_date | date | NO | | NULL | | | first_name | varchar(14) | NO | | NULL | | | last_name | varchar(16) | NO | | NULL | | | gender | enum('M','F') | NO | | NULL | | | hire_date | date | NO | | NULL | | +------------+---------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) ##以建表语句显示表结构(信息更加详细)\G,表示将查询结果进行按列打印 mysql> show create table employees\G; *************************** 1. row *************************** Table: employees Create Table: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` enum('M','F') NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
3.2 Create 创建操作
##1.创建新的数据库 mysql> create database test1; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | performance_schema | | test1 | +--------------------+ 5 rows in set (0.00 sec) ##2.创建新表 mysql> use test1; Database changed mysql> create table test_tb1( -> test_id INT NOT NULL AUTO_INCREMENT, -> test_title VARCHAR(100) NOT NULL, -> test_author VARCHAR(40) NOT NULL, -> create_date DATE, -> PRIMARY KEY( test_id ) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.20 sec) ##如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。 ##AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 ##PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。 ##ENGINE 设置存储引擎,CHARSET 设置编码。 注意:MySQL命令终止符为分号 ; 。 注意: -> 是换行符标识,不要复制。
建表的通用格式为
CREATE TABLE table_name (column_name column_type);
创建MySQL数据表需要以下信息:
- 表名
- 表字段名
- 定义每个表字段
3.3 Update 更新操作(插入和修改)
3.3.1 表数据的插入与修改
以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
##1.单条逐个插入 mysql> INSERT INTO test_tb1 -> (test_title,test_author,create_date) -> VALUES -> ("通信原理", "江晓林", NOW()); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> INSERT INTO test_tb1 -> (test_title, test_author, create_date) -> VALUES -> ("计算机网络", "谭浩强", NOW()); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> INSERT INTO test_tb1 -> (test_title, test_author, create_date) -> VALUES -> ("mysql基础教程", "菜鸟教程", '2016-05-06'); Query OK, 1 row affected (0.00 sec) ##NOW()获取当前时间,由于test_id为自增键,所以可以在添加数据的时候,不选择插入它的值 mysql> select * from test_tb1; +---------+-------------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-------------------+--------------+-------------+ | 1 | 通信原理 | 江晓林 | 2022-05-24 | | 2 | 计算机网络 | 谭浩强 | 2022-05-24 | | 3 | mysql基础教程 | 菜鸟教程 | 2016-05-06 | +---------+-------------------+--------------+-------------+ 3 rows in set (0.00 sec) ##2.批量插入数据,不同数据用逗号隔开 mysql> INSERT INTO test_tb1 -> (test_title,test_author,create_date) -> VALUES -> ("斗破苍穹","天蚕土豆",'2009-10-01'), -> ("冒牌大英雄","七十二编",'2008-9-22'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from test_tb1; +---------+-------------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-------------------+--------------+-------------+ | 1 | 通信原理 | 江晓林 | 2022-05-24 | | 2 | 计算机网络 | 谭浩强 | 2022-05-24 | | 3 | mysql基础教程 | 菜鸟教程 | 2016-05-06 | | 4 | 斗破苍穹 | 天蚕土豆 | 2009-10-01 | | 5 | 冒牌大英雄 | 七十二编 | 2008-09-22 | +---------+-------------------+--------------+-------------+ 5 rows in set (0.00 sec)
以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在一个单独表中同时更新数据。
当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。如果不使用where语句进行条件限制,使用UPDATE语句将会修改该字段的所有数据。
mysql> UPDATE test_tb1 SET test_author='龙光利' WHERE test_id=1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from test_tb1; +---------+-------------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-------------------+--------------+-------------+ | 1 | 通信原理 | 龙光利 | 2022-05-24 | | 2 | 计算机网络 | 谭浩强 | 2022-05-24 | | 3 | mysql基础教程 | 菜鸟教程 | 2016-05-06 | | 4 | 斗破苍穹 | 天蚕土豆 | 2009-10-01 | | 5 | 冒牌大英雄 | 七十二编 | 2008-09-22 | +---------+-------------------+--------------+-------------+ 5 rows in set (0.00 sec)
3.3.2 表结构的修改
利用alter可修改表的结构。
首先创建一个测试表alter_tbl。
mysql> create table alter_tbl( -> first varchar(10), -> second varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> desc alter_tbl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | first | varchar(10) | YES | | NULL | | | second | varchar(10) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
使用drop可以删除一个字段。
mysql> ALTER TABLE alter_tbl DROP first; Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc alter_tbl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | second | varchar(10) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
使用add可以增加一个字段。但默认新加的字段会添加刀数据表字段的末尾。
mysql> ALTER TABLE alter_tbl ADD first varchar(15); Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc alter_tbl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | second | varchar(10) | YES | | NULL | | | first | varchar(15) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
如果需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。
mysql> ALTER TABLE alter_tbl ADD id INT FIRST; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc alter_tbl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | second | varchar(10) | YES | | NULL | | | first | varchar(15) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)
使用change字句,可以修改字段名称,并指定新字段名称和类型。
mysql> ALTER TABLE alter_tbl change first phone INT; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc alter_tbl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | second | varchar(10) | YES | | NULL | | | phone | int(11) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
使用rename可以修改表名。
mysql> ALTER TABLE alter_tbl RENAME TO test_tbl2; Query OK, 0 rows affected (0.20 sec) mysql> show tables; +-----------------+ | Tables_in_test1 | +-----------------+ | test_tb1 | | test_tbl2 | +-----------------+ 2 rows in set (0.00 sec)
3.4 数据查询select
select是mysql当中最重要的操作,这里仅介绍简单的用法。
##1.查询一个表的所有数据 mysql> select * from test_tb1; +---------+-------------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-------------------+--------------+-------------+ | 1 | 通信原理 | 龙光利 | 2022-05-24 | | 2 | 计算机网络 | 谭浩强 | 2022-05-24 | | 3 | mysql基础教程 | 菜鸟教程 | 2016-05-06 | | 4 | 斗破苍穹 | 天蚕土豆 | 2009-10-01 | | 5 | 冒牌大英雄 | 七十二编 | 2008-09-22 | +---------+-------------------+--------------+-------------+ 5 rows in set (0.00 sec) ##2.使用where语句可以限定查询条件 mysql> select * from test_tb1 where test_id=1; +---------+--------------+-------------+-------------+ | test_id | test_title | test_author | create_date | +---------+--------------+-------------+-------------+ | 1 | 通信原理 | 龙光利 | 2022-05-24 | +---------+--------------+-------------+-------------+ 1 row in set (0.00 sec) ##3.使用and和or可以更加具体的限定条件 mysql> select * from test_tb1 where test_id<4 and test_author='菜鸟教程'; +---------+-------------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-------------------+--------------+-------------+ | 3 | mysql基础教程 | 菜鸟教程 | 2016-05-06 | +---------+-------------------+--------------+-------------+ 1 row in set (0.00 sec) mysql> select * from test_tb1 where test_id<3 or test_id =5; +---------+-----------------+--------------+-------------+ | test_id | test_title | test_author | create_date | +---------+-----------------+--------------+-------------+ | 1 | 通信原理 | 龙光利 | 2022-05-24 | | 2 | 计算机网络 | 谭浩强 | 2022-05-24 | | 5 | 冒牌大英雄 | 七十二编 | 2008-09-22 | +---------+-----------------+--------------+-------------+ 3 rows in set (0.00 sec)
这篇关于Mysql-基础命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程