使用Java實現數據庫編程—06 項目:銀行ATM取款機系統
1、 創建普通用戶:
語法: CREATE USER `user`@`host` [IDENTIFIED ‘password‘]; //user:用戶名,host:主機名,password:密碼; |
|
Eg:創建本地用戶teacher,密碼為123456, CREATE USER `teacher`@`localhost` IDENTIFIED BY ‘123456‘; |
Eg:本地用戶student,無密碼 CREATE USER `student`@`localhost`; |
`@`localhost`:本地用戶,允許登錄其他主機可省略 |
2、
GRANT語句可實現創建用戶同時授權或為已存在的用戶授權; |
語法: GRANT priv_type ON databasename.tablename // priv_type:用戶操作權限列表; // databasename.tablename:權限範圍,即庫名.表名 TO `user`@`host`[IDENTIFIED BY ‘password‘] [WITH GRANT OPTION]; //賦予GRANT權限 |
常用操作權限 CREATE和DROP權限 INSERT、DELETE、SELECT和UPDATE權限 ALTER權限 |
註:1.如果授予所有權限, priv_type可使用ALL 2.為所有數據庫和表授權,權限範圍可使用*.* |
Eg:創建本地用戶xiaoming,密碼123456,賦予myschool數據庫中student表增加和查詢權限 GRANT INSERT,SELECT ON myschool.student TO `xiaoming`@`localhost` IDENTIFIED BY ‘123456‘; |
Eg:為student@localhost用戶授予myschool數據庫中view_student視圖的查詢權限 GRANT SELECT ON myschool.view_student TO `student`@`localhost`; |
創建用戶報錯的: mysql> grant all on epet.*to `QINGG`@`localhost` identified by ‘1234‘; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 解決方法: mysql> flush privileges Query OK, 0 rows affected (0.01 sec) mysql> grant all on epet.*to `QINGG`@`localhost` identified by ‘1234‘; Query OK, 0 rows affected, 1 warning (0.01 sec) |
3、 使用mysqladmin命令修改root賬戶密碼:
語法: mysqladmin–u username –p password "newpassword" // newpassword:新密碼 |
註:mysqladmin需在DOS命令行執行,回車後輸入原密碼; |
Eg:將root密碼修改為1234 mysqladmin –u root –p password "1234" Enter password:**** |
4、 使用SET命令修改用戶密碼:登錄MySQL服務器後,使用SET命令修改當前用戶密碼;
語法: SET PASSWORD [FOR `username`@`host`]= PASSWORD("newpassword") //[FOR `username`@`host`]:可指定修改其他用戶密碼 |
|
註:只有超級管理員用戶(如root用戶)才能修改其他用戶密碼,如果是普通用戶,可修改自己的密碼; |
|
Eg:修改當前用戶密碼 SET PASSWORD = PASSWORD("0000"); |
Eg:修改其他用戶密碼 SET PASSWORD FOR `teacher`@`localhost`= PASSWORD("8888"); |
5、 刪除用戶:
語法: Eg:DROP USER `student`@`localhost`; |
6、 DISTINCT:distinct一般是用來去除查詢結果中的重復記錄的,而且這個語句在select、insert、delete和update中只可以在select中使用;
Eg:在表中,可能會包含重復值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。關鍵詞 distinct用於返回唯一不同的值。 表A:
表B:
|
1.作用於單列 select distinct name from A 執行後結果如下:
|
2、作用於多列 Eg: select distinct name, id from A 執行後結果如下:
實際上是根據name和id兩個字段來去重的,這種方式Access、MySQL、SQL Server同時支持。 Eg: select distinct xing, ming from B 返回如下結果:
返回的結果為兩行,這說明distinct並非是對xing和ming兩列“字符串拼接”後再去重的,而是分別作用於了xing和ming列。 註意:從上例中可以發現,當distinct應用到多個字段的時候,其應用的範圍是其後面的所有字段,而不只是緊挨著它的一個字段, 而且distinct只能放到所有字段的前面, 如下語句是錯誤的: SELECT xing, distinct ming from B; // 該語句是錯誤的 拋出錯誤如下: [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘DISTINCT province from B’ at line 1 |
3、COUNT統計 select count(distinct name) from A; --表中name去重後的數目, SQL Server、MySQL支持,而Access不支持 count是不能統計多個字段的,下面的SQL無法運行。 select count(distinct name, id) from A; 若想使用,請使用嵌套查詢,如下: select count(*) from (select distinct xing, name from B) AS M; |
4、distinct必須放在開頭: 當distinct應用到多個字段的時候,其應用的範圍是其後面的所有字段,而不只是緊挨著它的一個字段,而且distinct只能放到所有字段的前面, select id, distinct name from A; --會提示錯誤,因為distinct必須放在開頭 |
5、針對NULL的處理:distinct對NULL是不進行過濾的,即返回的結果中是包含NULL值的。 |
6、與ALL不能同時使用 默認情況下,查詢時返回所有的結果,此時使用的就是all語句,這是與distinct相對應的,如下: select all country, province from person |
7、與distinctrow同義 select distinctrow expression[,expression...] from tables [where conditions]; 這個語句與distinct的作用是相同的。 |
8、對*的處理:*代表整列,使用distinct對*操作 相當於 select DISTINCT id, `name`, country, province, city from person; |
9、其他 distinct語句中select顯示的字段只能是distinct指定的字段,其他字段是不可能出現的。例如,假如表A有“備註”列,如果想獲取distinc name,以及對應的“備註”字段,想直接通過distinct是不可能實現的。 |
使用Java實現數據庫編程—06 項目:銀行ATM取款機系統