1. 程式人生 > >常用的SQL語句

常用的SQL語句

刪除表 設置密碼 oot 用戶管理權限 myisam change unique 子句 ase

常用的SQL語句

MySQL服務的配置和使用
修改MySQL管理員的口令:mysqladmin –u root password 密碼字符串
如:mysqldmin –u root password 111111
連接MySQL服務器,使用命令: mysql [-h 主機名或IP地址] [-u 用戶名] [-p]


如:mysql –u root –p
如已有密碼需修改root密碼用命令: mysqladmin –u root –p password 新密碼字符串
如:mysqladmin –u root –p password 111111
創建數據庫格式為:CREATE DATABASE 數據庫名稱;
如:mysql>create database abc; 默認創建數據庫保存在/var/lib/mysql
查看數據庫是 mysql>show abc;
選擇數據庫是 USE 數據庫名稱; 如:mysql>use abc;
刪除數據庫是 DROP DATABASE 數據庫名稱; 如:mysql>drop database abc;


數據庫的創建和刪除
創建表是 CREATE TABLE 表名稱(字段1,字段2…[表級約束]) [TYPE=表類型]
其中字段(1,2 )格式為:字段名 字段類型 [字段約束]
如創建一個表student,如下:
mysql>create table student (
sno varchar(7) not null, 字段不允許為空
sname varchar (20 )not null,
ssex char (1) default ‘t’,
sbirthday date,
sdepa char (20),
primary key (sno) 表的主鍵
);
可用describe命令查看表的結構。

默認表的類型為MYISAM,並在/var/lib/mysql/abc 目錄下建立student.frm(表定義文件)student.MDY(數據文件)stedent.MYI(索引文件)
復制表 CREATE TABLE 新表名稱 LIKE 原表名稱;
如:mysql>create table xtable like student;
刪除表 DROP TABLE 表名稱1[表名稱2…];
如:mysql> drop table xtale;

修改表 ALTER TABLE 表名稱 更改動作1[動作2]
動作有ADD(增加) DROP(刪除)CHANGEMODIFY(更改字段名和類型)RENAME

增加字段:mysql>alter table student add saddress varchar(25);
更改字段名和字段類型: mysql>alter table student change saddress sremark test;
即使不更改字段類型也要給出字段類型如:
mysql>alter table student change saddress sremark varchar (25);
更改字段類型 :mysql> alter table student modify sremark varchar(25);
刪除字段:mysql>alter table student drop sremark
更改表名稱: mysql>alter table student rename to xs

表中數據的插入、刪除和修改
插入記錄: INSERT INTO 表名稱(字段名1,字段名2…
VALUES(字段1的值,字段2的值
如:mysql>insert into student (sno,sname,ssex,sbirthday,sdepa)
values(‘0321001’,’Liu Tao’,dagault,19870201,’math’);
查看表 mysql>select * from student;
插入與前面相同的記錄,可用insert命令的縮寫格式,
: mysql>insert into student values (‘0321001’, ‘Liu Tao’, default, 19870201, ‘mth’);
如果字段名列表中沒有給出表中的某些字段,那麽這些字段設置為默認值,
如:mysql>insert into student (sno,sname,sbirthday)
values(‘0321002’,’Wang Jun’,1870112);
一個單獨的insert語句中可使用多個valuse字句,插入多條記錄,
如:mysql>insert into student values
(‘0322001’, ‘Zhang Liaoyun’, ‘f’ 1971102,’computer’),
(‘0322002’, ‘Li Ming’, ‘t’ 1971105,’computer’);
刪除記錄: DELETE FROM 表名稱 WHERE 條件表達式;
如:mysql>delete from student where sno=’0321002’;
刪除student表中sno字段值前4位為‘0322’的記錄
如:mysql>delete from student where left (sno,4)=’0322’;
刪除所以記錄,可以不帶where字句
如:mysql>delete from student;
刪除所以記錄可以用命令truncate 刪除表,然後重建表,所以比delete命令快
如:mysql>truncate table student;
修改記錄 UPDATE 表名稱 SET 字段名1=字段值1
WHERE 條件表達式
如: mysql>update student set sbirthday=1920113, sdepa=’math’ where sno=’0321002’;

索引的創建與刪除
在創建表的同時創建索引
創建表時,可用INDEX字句或UNIQUE(字段值必須惟一)字句創建索引
如:創建課程表course, 課程編號cno字段為主鍵,課程名稱cname字段創建一個名為can的索引
mysql>create table course(
cno varchar(5) not null,
cname varchar(30) not null,
teacher varchar(20),
primary key (cno),
index can (cname)
);
向已存在的表添加索引 CREATE [UNIQUE ] INDEX 索引名ON表名稱 (字段名1[(長度)])
如:mysql>create index sna on student (sname);
對於類型為CHARVARCHAR的字段建立索引時還可指定長度值,類型為BLOBTEXT的字段索引時必須指定長度值。
mysql>create index sna on student (sname(10));
刪除索引 DROP INDEX 索引 ON表名稱;
如:mysql>drop index sna on student;


用戶的創建和刪除
初始化時有5MySQL授權表,其中hosttables_privcolumnts_priv 是空的,表userdb決定了MySQL默認的訪問規則。默認有mysqltest兩個數據庫。
授權表:user 用戶從哪些主機可以連接到數據庫服務器,以及對所以數據庫的訪問權限(全局權限)
db 用戶可以使用哪些權限,以及對數據庫執行哪些操作(數據庫級權限)
host 當表db 中的host 字段值為空時,用戶從哪些主機可以連接到數據庫服務器。
tables_priv 連接的用戶可以訪問哪些表(表級權限)
columnts_priv 連接的用戶可以訪問哪些字段 (字段級權限)
創建新用戶
MySQL管理員連接到數據庫服務器: #mysql –u root –p
創建新用戶guess並設置密碼,同時可以從任何主機連接數據庫服務器:
mysql>insert into mysql.user (host,user,password)
values (‘%’,’gusee’,password(‘guest’)); 使用password()函數,密碼是加密的
重載MySQL授權表:mysql>flush privileges;
遠程客戶端連接數據庫服務器 #mysql –h 192.168.0.50 –u guess –p 開放服務器的TCP斷口3306
查看當前用戶可用數據庫: show database
刪除用戶
mysql>delete from mysql.user where user=’guest’;
mysql>flush privileges; 重載MySQL授權表
更改用戶密碼
如:更改guset密碼為123456
mysql>update mysql.user set password=password(‘123456’)
where user =’guset’;
mysql>flush privileges;
或者是 mysql>set password for [email protected]%’=password(‘123456’);


用戶權限的設置
在表userdbhost中,所有字段聲明為ENUM(‘N’,’Y’),默認是‘N’;
在表tables_privcolumns_priv中,權限字段聲明為SET類型
修改授權表中的訪問權限有兩中方法,一是使用 INSERTUPDATEDELETEDML語句,
另一中是GRANTGRVOKE語句
使用GRANT語句授權:
格式如下:

GRANT 權限列表 [(字段列表)] on 數據庫名稱.表名稱
TO 用戶名@域名或IP地址
[INDETIFIED BY ‘密碼值’] [WITH CRANT OPTION];

授權哪個用戶能連接,從哪連接
如:授權用戶guest從任意主機連接數據庫服務器,並具有完全訪問數據庫abc的權限。
Mysql>grant all on abc.* to [email protected]%’ identified by ‘guest’
註意幾點:如指定用戶不存在,則創建該新用戶;
權限列表ALL表示授予全部權限,USAGE表不授予任何權限。
數據庫名稱.表名稱處可以使用通配符“*”。如“abc.*”表數據庫abc中所有表
用戶名@域名或IP地址設置誰能連,從哪連。用戶名 不能用通配符,但可以用‘ ’空字符串,表任何用戶;域名或IP地址可以用通配符“%”,使用是用單引號括起來。

授權用戶不同級別的訪問權限
如:新建用戶tom,能從子網192.168.16.0訪問數據庫服務器,可以讀取數據庫xsxk,並能修改表course 中字段teacher的值
mysql>grant select on xsxd.* to [email protected]%’ indentifiend by ‘123456’;
mysql>grant update(teacher) on xsxd.course to [email protected]%’’
註意幾點:數據庫名稱.表名稱 用來設置權限運用的級別,有全局的(*.*,指定數據庫的(xsxd.*
和指定表的(xsxd.student;
字段列表 設置權限運用中指定的表中的哪些字段,如update(cname,teacher)
權限列表 指定的權限與權限運行的級別有關,如有寫權限(FILEPROCESSRELOADSHUTDOWN)作為管理權限用於全局級別;對於字段級別只能指定SELECTINSERTUPDATEREFERENCES

授予用戶管理權限的權利
如:管理員授予擁護admin可以從本地連接數據庫服務器,對數據庫xsxk具有完全訪問權限,並可以
將擁有的權限賦予其他用戶
mysql>grant all on xsxd.* to [email protected] indentified by ‘123456’ with grant option;
其中with grant option 子句表示擁護擁有的權限可以賦予其他用戶。
mysql>qrant select on xsxd.student to [email protected]; 授予bill用戶權限
mysql>show grants for [email protected]; 查看用戶權限

使用REVOKE語句撤權
格式如下:
REVOKE 權限列表[(字段列表)] on數據庫名稱.表名稱
FROM用戶名@域名或IP地址
如:撤消用戶[email protected] 對數據庫xsxd的創建、刪除數據庫及表的權限,不撤消用戶賦予其它用戶的權限
mysql>revoke create,drop on xsxd.* from [email protected];
mysql>revoke grant option on xsxd.* from [email protected];

常用的SQL語句