MySQL笔记

【建库】create database yy default character set utf8;

【给予权限】 GRANT ALL PRIVILEGES ON opensip.* TO 'sip'@'%' IDENTIFIED BY 'openssiipp' WITH GRANT OPTION;

第一个*号 是代表所有数据库 ,第二个* 是代表改数据库下的所有表。

查看数据库中的用户SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

【查看表的结构 desc 表名】

【查看数据库当前状态】status

(显示当前选择的数据库,数据库的连接用户及IP,数据库运行的时间等信息)。

【数据库内查看数据库版本】 select version();

【查看数据库中的所有用户】

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

【查看数据库中某个用户的权限】

show grants for 'root'@'localhost'; 以'root'@'localhost 为例

【删除表中的数据,不删除表本身】

TRUNCATE TABLE


UPDATE projects SET created_on=DATE_FORMAT(created_on,'2017-%m-%d %T');

DELETE from projects WHERE created_on=DATE_FORMAT(created_on,'2017-2-23 %T');


UPDATE table_name SET date_col=DATE_FORMAT(date_col,'2017-%m-%d %T');
UPDATE dbo.TableToUpdate SET [Date Column] = DATEADD(YEAR, -2, [Date Column]);

查看用户权限 show grants for username;
赋予权限 grant select on dbname.* ro user;
grant select,update,delete ,insert on dmc_db.* to zx_root;
回收权限 revoke select on dbname.* from root; 如果权限不存在会报错。

设置权限时必须给出一下信息
1,要授予的权限
2,被授予访问权限的数据库或表
3,用户名
grant和revoke可以在几个层次上控制访问权限
1,整个服务器,使用 grant ALL 和revoke ALL
2,整个数据库,使用on database.*
3,特点表,使用on database.table
4,特定的列
5,特定的存储过程

user表中host列的值的意义
% 匹配所有主机
localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问;
::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

查看表的行数

SELECT COUNT(*) FROM tablename。

将查询的表的内容导出到一个文本文件
SELECT... INTO OUTFILE

select * from user into outfile '/tmp/q.txt';

输出文件请一定要放在 /tmp/ (具有mysql用户写文件的权限的文件夹)下面,否则会报错

以输出到 /root/q.txt为例
ERROR 1 (HY000): Can't create/write to file '/root/q.txt' (Errcode: 13)

SELECT ... INTO OUTFILE具有以下属性:

由MySQL服务器直接创建输出文件,这样的文件名应指定您希望在服务器主机上的文件将被写入。没有本地版本的LOAD DATA LOCAL版本的类似的语句。

必须要有MySQL的FILE权限才能执行的SELECT... INTO语句。

输出文件必须不存在。这可以防止MySQL从会破坏文件可能重要。

应该在服务器主机上或一些方法来检索文件从该主机的登录帐户。否则SELECT... INTO OUTFILE可能是没有价值的。

在Unix下,创造了世界可读的文件和所拥有的MySQL服务器。这意味着虽然就可以读取该文件,但是不能够删除它。


问题
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
解决方法:
/usr/local/mysql/bin/mysqld_safe(启动mysql的安全方式)
数据库的初始化

【】创建root 管理员【】


ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz4rfvyui';
//现在的mysql对密码强度要求较高,需要包含大小写字母、数字和特殊字符


mysqladmin -u root password 123456

修改mysql的密码
在命令行:mysqladmin -uroot -p1qaz4rA@ password 1qaz2wsx

在数据库中:UPDATE user SET Password=PASSWORD('1qaz2wsx') where USER=’root’;
FLUSH PRIVILEGES;
quit
grant all privileges on zabbix.* to root@'localhost' identified by '123456';


GRANT ALL PRIVILEGES ON *.* TO root@127.0.0.1 identified by '123456';
建库

grant all privileges on *.* to root@'192.168.1.153' identified by '123456';

允许所有的用户从
GRANT ALL PRIVILEGES ON *.* TO root@'192.168.1.190' IDENTIFIED BY '123456’ WITH GRANT OPTION;

【】create database cquser_198_s60 default character set utf8;
【】
create database dbname;
创建zabbix数据库时的示例。
mysql> create schema zabbix character set utf8;
mysql> create user 'zabbix'@'%' identified by '123456';
mysql>grant all on zabbix.* to 'zabbix'@'%';
mysql>flush privileges;
grant all privileges on zabbix.* to root@'192.168.1.190' identified by '123456';
UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
建表 use dbname;
create tables tabname;
删库 drop database dbname;
删表 drop table tabname
将表中记录清空 delete from tabname;
truncate table tabname;
显示表中的记录 select *from tabname;
重命名表 alter table name1 rename name2;
********************************************************************************
+++++++++++++++++++++++++++++++数据的导入和导出++++++++++++++++++++++++++++++++++
导出数据库和表
/usr/local/mysql/bin/mysqldump -uroot -p123456 zabbix > z.sql(将数据库zabbix中所有的表备份到z.sql文件中,z.sql是一个文本文件,文件名任取)
/usr/local/mysql/bin/mysqldump -uroot -p123456 zabbix actions users > /root/dump/zab.sql (将数据库zabbix的表actions和users备份到zab.sql)
/usr/local/mysql/bin/mysqldump -uroot -p123456 --all-database > ./dump/mysqll.dump (备份所有数据库)
导入数据库
看test有无。无则创建。
/usr/local/mysql/bin/mysqldump -uroot -p123456 test < /root/dump/mysq.sql

显示数据库列表 show databases;
选择数据库 use dabanasename;
显示库中的数据表 show tables;
显示表的结构: desc tablename;/describe tablename; ''''''''''''''
查询数据库的大小;
use information_schema;(存放了其它数据库的信息)
查询所有数据的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;
查询指定数据库的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='test';
查询数据中某个表的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='dbname' and table_name='meme='tbname';
查询数据库中某个表的数据和索引大小。
select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB from tables where table_schema='zabbix' and tabble_name ='functions';

连接MySQL: mysql -h ip -uroot -ppassword
修改mysql密码 mysqladmin -uroot -p1234567(旧) password 123456(新)。
查询时间 select now();
查询当前用户 select user();
查询当前数据库版本: select version();
查询当前使用的数据库:select database();

修改列的类型
alter table table1 modify id int unsigned;修改列的ID的类型为unsigned.
alter table table1 change id sid int unsigned;修改列ID的名字为sid,而且把属性修改为int unsigned

创建索引
alter table table1 add index ind_id(id);
create index ind_id on table1(id);
create unique index ind_id on table1(id);建立唯一索引。

删除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;


MySQL查询语言

查询zabbix数据库有多少个表
SELECT count(*) TABLES, table_schema FROM information_schema.TABLES where table_schema = 'zabbix' GROUP BY table_schema;

查看表的内容:
select *from tabname;


SQL 数据库操作语言(DML)

SQL ( 结构化查询语言 ) 是用于查询的语法,但是SQL语言也包含用于更新,

插入,删除记录的语法。


SELECT 从数据库表中获取数据

UPDATE 更新数据库表中的数据

DELETE 从数据库表中删除数据。

INSERT INTO 从数据库表中插入数据。

SQL 数据定义语言(DDL)

SQL 的数据定义语言部分使我们有能力创建或删除表格。我们可以定义

索引(键),规定表之间的链接。以及施加表之间的约束。

CREATE TABLE 创建新表

ALTER TABLE 变更(改变)数据库表

DROP TABLE 删除表

CREATE INDEX 创建索引(搜索键)

DROP INDEX 删除索引


SQL SELECT DISTINCT 语句。

在表中,可能会包含重复值,有时候我们仅仅需要列出不同的(distinct)值

关键词 DISTINCT 用于返回唯一不同的值。


SELECT DISTINCT 列名称 FROM 表名称。

比如在表orders表中。有一列“company”有几个值

IBM , APPLE ,HUAWEI,IBM.

select company from orders;
则 列出的结果为 IBM , APPLE ,HUAWEI,IBM.
select distinct company from orders;

则列出结果为 IBM , APPLE ,HUAWEI

WHERE 子句

如需有条件得从表中选取数据,可将WHERE 子句 添加到 SELECT 语句。

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值。


下面的运算符可在 WHERE 子句中使用。

= 等于 <> 不等于 > 大于 < 小于

>= 大于等于 <= 小于等于

BETWEEN 在某个范围内。 LIKE 搜索某种模式。

在某些版本的SQL 语句中,操作符 <>可以写作为 !=


引号的使用

请注意,我们在例子中的条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号

关于文本:

这是正确的:SELECT * FROM Persons WHERE FirstName='Bush' SELECT * FROM clan WHERE clname='DualLink'

这是错误的 SELECT * FROM Persons WHERE FirstName=Bush

关于数值

这是正确的:SELECT * FROM Persons WHERE Year>1965

这是错误的:SELECT * FROM Persons WHERE Year>'1965'

【AND 和 OR 】运算符用于基于一个以上的条件对记录进行过滤。

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'


SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

ORDER BY 语句用于对结果集进行排序。

ORDER BY 语句用于根据指定的列队结果集进行排序。

ORDER BY语句默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,可以使用

DESC关键字。

select * from valuemaps order by valuemapid;

select * from valuemaps order by valuemapid desc;

【 INSERT INTO 语句】

INSERT INTO 语句用于向表格中插入新的行。

语法: INSERT INTO 表名称 VALUES (值1,值2,......)

我们也可以指定所要插入数据的列。

INSERT INTO table_name(列1,列2,...) VALUES(值1,)

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing') 【Persons是表名】

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

【其中 (LastName, Address) 是两个指定的列。'Wilson', 'Champs-Elysees'是相应的值】


UPDATE 用于修改表中的数据。

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值,

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'


【DELETE语句】

DELETE语句可用于删除表中的行。

DELETE FROM 表名称 WHERE 列名称 = 值。

++删除所有行++

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是

完整的。

DELETE FROM table_name.

或者 DELETE * FROM table_name


【 TOP子句 】

TOP 子句用于规定要返回的记录的数目。

对于用于数千条记录的大型表来说,top子句是非常有用的。

SELECT TOP 2 * FROM Persons 从表中选取头两条记录。

SELECT TOP 50 PERCENT * FROM Persons 从表中选取50%的记录。

【LIKE操作符】

LIKE 操作符用于在WHERE子句中搜索列中的指定模式。

LIKE 操作语法:

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern

从persons表中选取出居住在以N开始的城市里的人。

SELECT * FROM Persons WHERE City LIKE 'N%' ‘%’为通配符

以g结尾 SELECT * FROM Persons WHERE City LIKE '%g'

包含 'lon'的。 SELECT * FROM Persons WHERE City LIKE '%lon%'


【通配符】

% 替代一个或多个字符 _ 仅代替一个字符

[charlist] 字符列中的任何单一字符。

[^charlist] 或者 [!charlist] 不在字符列中的任意单一字符。

我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons WHERE City LIKE '[ALN]%'

不以 A或者L或者N开头的

SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

【IN】操作符

IN 操作符允许我们在WHERE子句规定多个值。

SQL IN 语法:

SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

在person 表中选取lastname为 Adams 和 Carter 的人:

SELECT * FROM Persons WHERE LastName IN ('Adams','Carter');

【BETWEEN 操作符】

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。


select * from groups where groupid between 1 and 4;

显示结果里面既有 1 也有 4 的。

如果要显示上面例子显示范围之外的,使用 NOT 操作符
select * from groups where groupid not between 1 and 4;


【Alias】可以为列名称和表名称指定别名。

表的语法: SELECT column_name(s) FROM table_name AS alias_name

列的语法: SELECT column_name AS alias_name FROM table_name

SELECT LastName AS Family, FirstName AS Name FROM Persons

其效果就是展示出的数据 两列中的列名称分别为 Family 和 Name

假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用别名的 SELECT 语句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'

【JOIN】 用于根据两个或多个表中的列之间的关系,从这些表中间查询数据。

Join 和 Key
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的
在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,
把表间的数据交叉捆绑在一起。

不同的 SQL JOIN

INNER JOIN 内连接

LEFT JOIN 即使右表中没有匹配,也从左表中返回所有的行。

RIGHT JOIN 即使左表中没有匹配,也从右表返回所有的行。

FULL JOIN 只要其中一个表中存在匹配,就返回行。

两个表中的数据有交叉,可以将两个表中的数据连接交叉。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P

除了上面的方法,可以使用JOIN来从两个表中获取数据。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

SELECT INTO 语句可以用于创建表的备份文件。

SELECT INTO语句从一个表中选取数据,然后把数据插入另一个表中。

SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

把所有的列插入新表。

SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename

或者只把希望的列插入新表

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

制作persons表的备份。

SELECT * INTO Persons_backup FROM Persons

IN 子句可用于向另一个数据库中拷贝表。

SELECT * INTO Persons IN 'Backup.mdb' FROM Persons

如果我们希望拷贝某些域,可以在select 语句后列出这些域。

SELECT LastName,FirstName INTO Persons_backup FROM Persons

可以添加 WHERE 子句,下面的例子通过 Persons表中提取住在 beijing的人的信息。

SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

CREATE TABLE 语句用于创建数据库中的表。

CREATE TABLE 表的名称

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

数据类型(data_type 规定了列可容纳何种数据类型。) SQL中最常用的数据类型。

integer(size) int(size) smallint(size) tinyint(size)

仅容纳整数。在括号内规定数字的最大位数。

decimal(size,d) numeric(size,d)

容纳带有小数的数字。 size 规定数字的最大位数,d 规定小数点右侧的最大位数。

char(size)

容纳固定长度的字符串(可容纳字母,数字,以及特殊字符)

在括号中规定字符串的长度。

varchar(size)

容纳可变长度的字符串(可容纳字母,数字以及特殊的字符);

在括号中规定字符串的最大长度。

date (yyyymmdd) 容纳日期。

创建空表之后可以使用 INSERT INTO 语句向空表中写入数据。

【列的约束 Constraints】


NOT NULL 约束强制列不接受 NULL 值

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,

就无法插入新记录或者更新记录。

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL
) 强制Id_P列和LastName列 不接受 NULL 值。

UNIQUE

UNIQUE 约束唯一标识数据库表中的每一条记录。

UNIQUE 和 PRIMARY KEY 约束列均为列或者列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

CREATE TABLE Persons
(
Id_P int NOT NULL,
UNIQUE (Id_P)

如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)

当表已经被创建,如需在id_P列创建UNIQUE约束,请使用下列SQL

ALTER TABLE Persons ADD UNIQUE(id_P)

如需命名 UNIQUE 约束,并定义多个列的UNIQUE 约束,请使用下面的SQL语法

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

撤销 UNIQUE 约束
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表的每条记录。

主键必须包含唯一的值。

主键列不能包含NULL值。

每个表都应该有一个主键,并且每个表只能有一个主键。

在 persos表创建 id_P列创建PRIMARY KEY 约束。

CREATE TABLE Persons
(
Id_P int NOT NULL,
PRIMARY KEY (Id_P)
)

如果需要命名 PRIMARY KET 约束,以及为多个列定义 PRIMARY KEY 约束

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)


在表已经创建的情况下,为列创建PRIMARY约束。

ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)

如果需要命名PRIMARY 约束,以及为多个列定义PRIMARY KEY 约束

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)

如果使用ALTER TABLE 语句添加主键,必须把主键列声明为不包含NULL值(在表首次创建时)

撤销 PRIMARY KEY 约束

如需撤销 PRIMARY KEY 约束,

MySQL++ ALTER TABLE Persons DROP PRIMARY KEY

SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID


【SQL CHECK 约束】

CHECK 约束用于限制列中的值的范围。

如果对单个列定义CHECK约束,那么该列只允许特定的值

如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。

CREATE TABLE Persons
(
Id_P int NOT NULL,

CHECK (Id_P>0)

如果需要命名CHECK约束,以及为多个列定义CHECK约束。


CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)

在表已经存在的情况下,创建CHECK约束。

ALTER TABLE Persons ADD CHECK (Id_P>0)

如果需要命名CHECK约束,以及为多个列定义CHECK约束。

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

撤销CHECK 约束。

ALTER TABLE Persons DROP CHECK chk_Person

【DEFAULT 约束】

DEFAULT 约束用于向列中插入默认值

如果没有规定其他的值,那么会将默认值添加到所有新记录。

CREATE TABLE Persons
(
City varchar(255) DEFAULT 'Sandnes'
)

使用类似GETDATE() 这样的函数,DEFAULT约束也可以用于插入系统值
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)

在表已经创建的情况下,为列创建 DEFAULT约束。

ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'

撤销 DEFAULT 约束

ALTER TABLE Persons ALTER City DROP DEFAULT

【CREATE INDEX】语句用于在表中创建索引

在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据。

用户无法看到索引,它们只能被用来加速搜索或者查询。

更新一个包含索引的表需要比更新一个没有索引的表更多时间,这是由于索引本身

也需要更新,理想的做法是仅仅在常被搜索的列(以及表)上面创建索引。

在表上创建一个简答的索引,允许使用重复的值。

CREATE INDEX 语法

CREATE INDEX index_name ON table_name (column_name)

"column_name" 规定需要索引的列。

CREATE UNIQUE INDEX 语法

在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX index_name ON table_name (column_name)

创建一个简单的索引,名为Personindex , 在Person 表的LastName列。

CREATE INDEX PersonIndex ON Person (LastName)

如果希望以降序索引某个列中的值,可以在列名称之后添加保留字DESC

CREATE INDEX PersonIndex ON Person (LastName DESC)

如果希望索引不止一个列,你可以在括号中列出这些列的值,用逗号隔开。

CREATE INDEX PersonIndex ON Person (LastName, FirstName)

【DROP】

使用DROP 语句可以删除 索引,表和数据库。

使用 DROP INDEX 命令删除表中的索引。

ALTER TABLE table_name DROP INDEX index_name

DROP TABLE 语句

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)

DROP TABLE 表名称。

SQL DROP DATABASE 语句

DROP DATABASE 语句用于删除数据库。

DROP DATABASE 数据库名称。

如果我们仅仅需要出去表内的数据,但并不删除表本身

请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):

TRUNCATE TABLE 表名称

【ALTER TABLE】

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


例子 在persons表中添加一个名为 birth 的新列

ALTER TABLE persons ADD birth date

改变persons表中的 birth列的数据类型

ALTER TABLE Persons ALTER COLUMN Bith year;

请注意 : birth 列的数据类型是year ,可以存放 2 位或 4位格式的年份。

DROP COLUMN 实例

删除 person表中的birth列

ALTER TABLE Person DROP COLUMN Birth.


【Auto-increment】

Auto-increment会在新记录插入表中时生成一个唯一的数字。

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,

PRIMARY KEY (P_Id)
)

MYSQL使用 AUTO_INCREMENT 关键字 来执行 auto-increment 任务

默认地。AUTO_INCREMENT 的开始值是1 ,每条新记录递增1。

要让 AUTO_INCREMENT 序列以其他的值起始,使用下列语法

ALTER TABLE Persons AUTO_INCREMENT=100

要在 "Persons" 表中插入新记录,我们不必为 "P_Id" 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Bill','Gates')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。
"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

【DATE】 函数

NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间

SQL Date 数据类型

MySQL 使用下列数据类型 在数据库中存储日期或日期/时间值。

DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的数字


【修改列的类型】

alter table 表名 modify 列名 新类型 新参数【修改列类型】

例如; alter table test modify gender char(4) not null default '';

修改表 peo,将表中 sex项 改为 8位

alter table peo modify sex varchar(8);

alter table peo modify sex char(9);(这样也可以)

alter table 表名 change 旧列名 新列名 新类型 新参数【修改列名和列类型】

alter table peo change sex xingb char(4); //将表peo中列sex的名称改为xingb,4位

【增加列】

alter table 表名 add 列名 列类型 列参数【加的列在表的最后面】

例如 ; alter table peo add age int;

alter table peo add addre char(4) after sex;(把新列加在某sex列的后面)

为表peo新增列 country 值不为空,默认为 china ,加 first表示把新加的列放在最前面。

alter table peo add country char(8) not null default "china" first;

删除列。

alter table 表名 drop 列名

例如: alter table peo drop age; // 删除了表peo中的 age项。


【查看表的创建代码】

use dbname;
show create table 表名。


【在数据库中查找特定的数据库名】

use information_schema;

information_schema 库中有一个表 SCHEMATA ,它提供了当前mysql中所有的数据库信息,是show databases的查询结果就是来源于此。

比如查询数据库库名中 名字以cquser 开头的数据库。

select SCHEMA_NAME from SCHEMATA where SCHEMA_NAME LIKE 'cquser%';


【查询数据库文件存放路径】

show global variables like "%datadir%"; 在配置文件/etc/my.cnf 中设置。

【在表中删除特定的记录】

delete from chas where name="ARCH·ELF";
【删除特定命名的数据库】

注意:只是生成sql执行语句
select concat( 'drop table ', table_name, ';' ) from information_schema.tables where table_name like 'a_%';

select concat( 'drop database ', SCHEMA_NAME, ';' ) from information_schema.SCHEMATA where SCHEMA_NAME like 'ww%';

show variables like 'max_connections';

show status like 'max%connections';

show variables like 'key_buffer_size';

show global status like 'key_read%';

mysqldump -u root -p --all-database > /tmp/all-database.dump

数据库的 一种重启  关闭 mysqladmin -uroot -p shutdown   启动  mysqld_safe

mysql 中批量修改内容

update table set content=replace(content,'www.zhonghuass.cn','img.zhonghuass.cn')    将表中某字段中的 www 修改成 img... ,当然后面可以加 where 语句

update $c set thumb=replace(thumb,'dmg.zhonghuass.cn','dmg.img.zhonghuass.cn') where thumb regexp '^http://dmg.zhonghuass.cn/uploadfile';"

还可以使用 mysql正则表达式 (参考http://www.runoob.com/mysql/mysql-regexp.html )

原文地址:https://www.cnblogs.com/jkklearn/p/7026565.html