mysql数据库的相关基础语法
免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
仅用于掌握网络安全SQL注入基础使用,详细版和高级版另外作指导
一、创建数据库:
CREATE DATABASE database_name;
二、显示所有数据库
SHOW DATABASES;
三、删除数据库
DROP DATABASE database_name;
四、使用数据库
USE database_name;
五、创建表
要在数据库中创建一个新表,可以使用MySQL CREATE TABLE
语句。 CREATE TABLE
语句是MySQL中最复杂的语句之一。
下面以简单的形式来说明CREATE TABLE
语句的语法:
CREATE TABLE [IF NOT EXISTS] table_name(
column_list
) engine=table_type;
我们来更详细地来查看其语法:
- 首先,指定要在
CREATE TABLE
子句之后创建的表的名称。表名在数据库中必须是唯一的。IF NOT EXISTS
是语句的可选部分,允许您检查正在创建的表是否已存在于数据库中。 如果是这种情况,MySQL将忽略整个语句,不会创建任何新的表。 强烈建议在每个CREATE TABLE
语句中使用IF NOT EXISTS
来防止创建已存在的新表而产生错误。 - 其次,在
column_list
部分指定表的列表。字段的列用逗号(,
)分隔。我们将在下一节中向您展示如何更详细地列(字段)定义。 - 第三,需要为
engine
子句中的表指定存储引擎。可以使用任何存储引擎,如:InnoDB,MyISAM,HEAP,EXAMPLE,CSV,ARCHIVE,MERGE, FEDERATED或NDBCLUSTER。如果不明确声明存储引擎,MySQL将默认使用InnoDB。
注:InnoDB自MySQL 5.5之后成为默认存储引擎。 InnoDB表类型带来了诸如ACID事务,引用完整性和崩溃恢复等关系数据库管理系统的诸多好处。在以前的版本中,MySQL使用MyISAM作为默认存储引擎。
要在CREATE TABLE
语句中为表定义列,请使用以下语法:
column_name data_type[size] [NOT NULL|NULL] [DEFAULT value]
[AUTO_INCREMENT]
SQL
以上语法中最重要的组成部分是:
column_name
指定列的名称。每列具有特定数据类型和大小,例如:VARCHAR(255)
。NOT NULL
或NULL
表示该列是否接受NULL
值。DEFAULT
值用于指定列的默认值。AUTO_INCREMENT
指示每当将新行插入到表中时,列的值会自动增加。每个表都有一个且只有一个AUTO_INCREMENT
列。
如果要将表的特定列设置为主键,则使用以下语法:
PRIMARY KEY (col1,col2,...)
SQL
MySQL CREATE TABLE语句示例
下面让我们练习一个例子,在示例数据库(testdb)中创建一个名为tasks
的新表,如下所示:
可以使用CREATE TABLE
语句创建这个tasks
表,如下所示:
CREATE TABLE IF NOT EXISTS tasks (
task_id INT(11) NOT NULL AUTO_INCREMENT,
subject VARCHAR(45) DEFAULT NULL,
start_date DATE DEFAULT NULL,
end_date DATE DEFAULT NULL,
description VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (task_id)
) ENGINE=InnoDB;
SQL
在本教程中,您已经学习了如何使用MySQL CREATE TABLE
语句在数据库中创建新表。
CREATE TABLE table_name (column_name1 data_type1, column_name2 data_type2, …);
六、删除指定数据库的指定表
USE your_database_name;
DROP TABLE users;删除指定数据库中的指定表
七、添加数据:
INSERT INTO users (id, username, password) VALUES (1, ‘John Doe’, ‘[email protected]’);
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,email VARCHAR(100));
ALTER TABLE users ADD COLUMN address VARCHAR(100);
八、查询数据:
SELECT DATABASE();查询当前数据库
MySQL SELECT语句简介
使用SELECT
语句从表或视图获取数据。表由行和列组成,如电子表格。 通常,我们只希望看到子集行,列的子集或两者的组合。SELECT
语句的结果称为结果集,它是行列表,每行由相同数量的列组成。
请参阅示例数据库(yiibaidb
)中的以下employees
表的结构。它有8
列:员工人数,姓氏,名字,分机,电子邮件,办公室代码,报告,职位等。
SELECT
语句控制要查看哪些列和行。例如,如果只对所有员工的名字,姓氏和职位感兴趣,或者您只想查看其职位是销售代表的每位员工的信息,则SELECT
语句可帮助您执行这些操作。
我们来看一下SELECT
语句的语法:
SELECT
column_1, column_2, ...
FROM
table_1
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
WHERE
conditions
GROUP BY column_1
HAVING group_conditions
ORDER BY column_1
LIMIT offset, length;
SQL
SELECT
语句由以下列表中所述的几个子句组成:
SELECT
之后是逗号分隔列或星号(*
)的列表,表示要返回所有列。FROM
指定要查询数据的表或视图。JOIN
根据某些连接条件从其他表中获取数据。WHERE
过滤结果集中的行。GROUP BY
将一组行组合成小分组,并对每个小分组应用聚合函数。HAVING
过滤器基于GROUP BY
子句定义的小分组。ORDER BY
指定用于排序的列的列表。LIMIT
限制返回行的数量。
语句中的SELECT
和FROM
语句是必须的,其他部分是可选的。
在随后的教程中将更详细地了解每个子句。在本教程中,我们将重点介绍
SELECT
语句的简单形式用法。
MySQL SELECT语句示例
SELECT
语句允许通过在SELECT
子句中指定逗号分隔列的列表来查询表的部分数据。 例如,如果要仅查看员工的名字,姓氏和职位,请使用以下查询:
SELECT
lastname, firstname, jobtitle
FROM
employees;
SQL
即使员工表中有很多列,SELECT
语句只返回表中所有行的三列数据,如下图所示:
mysql> SELECT lastname, firstname, jobtitle FROM employees;
+-----------+-----------+----------------------+
| lastname | firstname | jobtitle |
+-----------+-----------+----------------------+
| Murphy | Diane | President |
| Patterson | Mary | VP Sales |
| Firrelli | Jeff | VP Marketing |
| Patterson | William | Sales Manager (APAC) |
| Bondur | Gerard | Sale Manager (EMEA) |
| Bow | Anthony | Sales Manager (NA) |
| Jennings | Leslie | Sales Rep |
| Thompson | Leslie | Sales Rep |
| Firrelli | Julie | Sales Rep |
| Patterson | Steve | Sales Rep |
| Tseng | Foon Yue | Sales Rep |
| Vanauf | George | Sales Rep |
| Bondur | Loui | Sales Rep |
| Hernandez | Gerard | Sales Rep |
| Castillo | Pamela | Sales Rep |
| Bott | Larry | Sales Rep |
| Jones | Barry | Sales Rep |
| Fixter | Andy | Sales Rep |
| Marsh | Peter | Sales Rep |
| King | Tom | Sales Rep |
| Nishi | Mami | Sales Rep |
| Kato | Yoshimi | Sales Rep |
| Gerard | Martin | Sales Rep |
+-----------+-----------+----------------------+
23 rows in set
Shell
注意比较以下两个语句返回列有什么区别 -
语句-1
SELECT lastname, firstname, jobtitle FROM employees;
SQL
语句-2
SELECT * FROM employees;
SQL
如果要获取employees
表中所有列的数据,可以列出SELECT
子句中的所有列名,或者只需使用星号(*
)表示您想要从表的所有列获取数据,如下查询:
mysql> SELECT * FROM employees;
+----------------+-----------+-----------+-----------+-----------------------+------------+-----------+----------------------+
| employeeNumber | lastName | firstName | extension | email | officeCode | reportsTo | jobTitle |
+----------------+-----------+-----------+-----------+-----------------------+------------+-----------+----------------------+
| 1002 | Murphy | Diane | x5800 | [email protected] | 1 | NULL | President |
| 1056 | Patterson | Mary | x4611 | [email protected] | 1 | 1002 | VP Sales |
| 1076 | Firrelli | Jeff | x9273 | [email protected] | 1 | 1002 | VP Marketing |
| 1088 | Patterson | William | x4871 | [email protected] | 6 | 1056 | Sales Manager (APAC) |
| 1102 | Bondur | Gerard | x5408 | [email protected] | 4 | 1056 | Sale Manager (EMEA) |
| 1143 | Bow | Anthony | x5428 | [email protected] | 1 | 1056 | Sales Manager (NA) |
| 1165 | Jennings | Leslie | x3291 | [email protected] | 1 | 1143 | Sales Rep |
| 1166 | Thompson | Leslie | x4065 | [email protected] | 1 | 1143 | Sales Rep |
| 1188 | Firrelli | Julie | x2173 | [email protected] | 2 | 1143 | Sales Rep |
| 1216 | Patterson | Steve | x4334 | [email protected] | 2 | 1143 | Sales Rep |
| 1286 | Tseng | Foon Yue | x2248 | [email protected] | 3 | 1143 | Sales Rep |
| 1323 | Vanauf | George | x4102 | [email protected] | 3 | 1143 | Sales Rep |
| 1337 | Bondur | Loui | x6493 | [email protected] | 4 | 1102 | Sales Rep |
| 1370 | Hernandez | Gerard | x2028 | [email protected] | 4 | 1102 | Sales Rep |
| 1401 | Castillo | Pamela | x2759 | [email protected] | 4 | 1102 | Sales Rep |
| 1501 | Bott | Larry | x2311 | [email protected] | 7 | 1102 | Sales Rep |
| 1504 | Jones | Barry | x102 | [email protected] | 7 | 1102 | Sales Rep |
| 1611 | Fixter | Andy | x101 | [email protected] | 6 | 1088 | Sales Rep |
| 1612 | Marsh | Peter | x102 | [email protected] | 6 | 1088 | Sales Rep |
| 1619 | King | Tom | x103 | [email protected] | 6 | 1088 | Sales Rep |
| 1621 | Nishi | Mami | x101 | [email protected] | 5 | 1056 | Sales Rep |
| 1625 | Kato | Yoshimi | x102 | [email protected] | 5 | 1621 | Sales Rep |
| 1702 | Gerard | Martin | x2312 | [email protected] | 4 | 1102 | Sales Rep |
+----------------+-----------+-----------+-----------+-----------------------+------------+-----------+----------------------+
23 rows in set
Shell
它返回employees
表中的所有列和行。应该使用星号(*
)进行测试。建议显式获取数据的列,原因如下:
- 使用星号(
*
)可能会返回不使用的列的数据。 它在MySQL数据库服务器和应用程序之间产生不必要的I/O磁盘和网络流量。 - 如果明确指定列,则结果集更可预测并且更易于管理。 想象一下,当您使用星号(
*
)并且有人通过添加更多列来更改表格数据时,将会得到一个与预期不同的结果集。 - 使用星号(
*
)可能会将敏感信息暴露给未经授权的用户。
在本教程中,您已经了解并熟悉了MySQL SELECT
语句的用法,并通过SELECT
语句从MySQL表中查询数据。