SQL对大小写不敏感
登录mysql数据库:打开命令行窗口,进入mysql/bin目录,输入:mysql -u root -p(如果是远程数据库,假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123,输入:mysql -h 110.110.110.110 -u root -p abcd123)
修改数据库密码:mysql/bin>mysql admin -u用户名 -p旧密码 password 新密码
显示当前数据库服务器中的数据库列表:mysql> SHOW DATABASES;
切换数据库:mysql> use database;
查看数据库下表名称:mysql>show tables;
查看表中的字段名称:mysql>show columns from 表名;
退出数据库:mysql>exit;
创建数据库: CREATE DATABASE 数据库名;
创建数据库表:mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
删除数据库:mysql> DROP DATABASE 库名;
删除数据表:mysql> DROP TABLE 表名;
修改表名, TO 或AS都可以,也以省略掉: ALTER TABLE 表名 RENAME [TO|AS] 新表名
将表中记录清空:mysql> DELETE FROM 表名;(删除表中某行数据:DELETE FROM 表名称 WHERE 列名称 = 值)
往表中插入记录:mysql> INSERT INTO 表名 VALUES (值1, 值2,....);(我们也可以指定所要插入数据的列:INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....)
更新表中数据:mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';
增加一列:alter table 表名 add 字段名 varchar(10) not Null;
删除一列:alter table 表名 drop 字段名;
修改某字段名:alter table 表名 change 原字段名 新字段名 字段类型;
修改某字段类型:alter table 表名 modify 字段名 字段类型;
Mysql基础语法
1、select语句
SELECT 列名称 FROM 表名称(select * from 表名)
2、DISTINCT语句
SELECT DISTINCT列名称 FROM 表名称(关键词 DISTINCT 用于返回唯一不同的值。)
3、WHERE语句
SELECT列名称 FROM 表名称 WHERE 列名 运算符 值(常用运算符:>、<、=、<>、>=、<=、BETWEEN、LIKE,SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。)
4、AND /OR语句
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
5、ORDER BY语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
Mysql高级语法
1、LIMIT语句
SELECT * FROM 表名 LIMIT NUMBER;(选取前几条数据)
2、LIKE语句
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;(用于在 WHERE 子句中搜索列中的指定模式。)
3、通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
通配符 | 描述 |
% | 替代一个活多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或[!charlist] | 不在字符列中的任何单一字符 |
4、IN操作符
IN 操作符允许我们在 WHERE 子句中规定多个值:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
5、BETWEEN操作符
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
6、Alias:为类名和表名指定别名
为表名指定别名:SELECT column_name(s) FROM table_name AS alias_name
为列名指定别名:SELECT column_name(s) AS alias_name FROM table_name
7、join
inner join ...on:在表中存在至少一个匹配时,INNER JOIN 关键字返回行。INNER JOIN 与 JOIN 是相同的。
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
left join ...on:即使右表中没有匹配,也从左表返回所有的行;
SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
right join ...on:即使左表中没有匹配,也从右表返回所有的行;
SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
full join ...on:只要其中一个表中存在匹配,就返回行;(mysql不支持,可以用left join+ union+right join)
7、Union操作符
用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
1、select into :可用于创建表的备份复件
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
使用 SELECT INTO FROM 备份mysql数据表的时候,运行相关 sql 语句的时候却一直返回 [Err] 1327 - Undeclared variable: …… 这种错误,原来 mysql 数据库是不支持 SELECT INTO FROM 这种语句的,但是经过研究是可以通过另外一种变通的方法解决这个问题的。进过搜索相关资料以及实验结果证实,可以使用Create table Table2 (Select * from Table1);
这种语句代替SELECT vale1, value2, value3 into Table2 from Table1;
2、constraints :约束
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
(1)NOT NULL:
约束强制列不接受 NULL 值,如果不向字段添加值,就无法插入新记录或者更新记录
-
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
(2)UNIQUE:
UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
-
创建表时添加约束
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255)
unique (Id_p) )当表已经被创建时,添加约束:
alter table persons
add unique(Id_p)
(3)PRIMARY KEY
PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
-
创建表时添加约束
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
当表已被创建时,添加约束:
alter table persons
add PRIMARY KEY(Id_p)(4)FOREIGN KEY
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
-
创建表时添加约束
CREATE TABLE Orders ( Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (Id_O), FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
当表已被创建时添加约束
alter table orders
add foreign key (id_p)
reference persons(id_p)(5)CHECK
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
创建表时添加约束 CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (Id_P>0) ) 添加约束时,表已被创建 ALTER TABLE Persons ADD CHECK (Id_P>0)
(6)DEFAULT:用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
-
创建表时添加约束 CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) DEFAULT 'Sandnes' ) 添加约束时表已存在 ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
3、create index:创建索引
-
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
CREATE INDEX index_name ON table_name (column_name)
注释:"column_name" 规定需要索引的列。
4、Drop:删除索引、表和数据库
ALTER TABLE table_name DROP INDEX index_name
DROP table table_name
DROP DATABASE 数据库名
5、Alter Table:添加修改和删除列
如需在表中添加列,请使用下列语法: ALTER TABLE table_name ADD column_name datatype 要删除表中的列,请使用下列语法: ALTER TABLE table_name DROP COLUMN column_name 注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。 要改变表中列的数据类型,请使用下列语法: ALTER TABLE table_name ALTER COLUMN column_name datatype