ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql-基础命令

2022-05-30 09:02:36  阅读:170  来源: 互联网

标签:rows 0.00 Mysql 基础 命令 sec mysql test NULL


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)

标签:rows,0.00,Mysql,基础,命令,sec,mysql,test,NULL
来源: https://www.cnblogs.com/Canyun-blogs/p/16325622.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有