標籤:啟動mysql safe rac index upd 允許 修改 忽略 pass
資料庫的關閉方法:
1、優雅的關閉資料庫的方法:
mysqladmin -uroot -p123456 shutdown
2、指令碼關閉:
/etc/init.d/mysqld stop
3、使用kill訊號的方法(最好不用)
kill -USR2 ‘cat path/pid‘
history不記錄曆史命令
HISTCONTROL=ignorespace (敲命令的時候加一個空格,可以不記錄)
善於使用mysql的help
Mysql設定密碼的方法:
mysqladmin -uroot password ‘123456‘
mysqladmin -uroot password ‘123456‘ -S /data/3306/mysql.sock(多執行個體的密碼設定)
Mysql修改密碼:
mysqladmin -uroot -p123456 password ‘template‘
mysqladmin -uroot -p123456 password ‘template‘ -S /data/3306/mysql.sock(多執行個體修改密碼)
使用sql語句修改密碼:
mysql>UPDATE mysql.user SET password=PASSWORD("123456") WHERE user=‘root‘;
set方法:
set password=password(‘123456‘)
Mysql密碼忘記找回步驟:
1、先停止資料庫
/etc/init.d/mysqld stop
2、使用--skip-grant-tables啟動mysql,忽略授權登入驗證
[[email protected] ~]# mysqld_safe --skip-grant-tables --user=mysql &
空密碼登入:
[[email protected] ~]# mysql
修改密碼:
mysql>update mysql.user set password=password("123456") where user=‘root‘ and host=‘localhost‘;
重新整理許可權:
mysql>flush privileges;
關閉mysql
[[email protected] ~]# mysqladmin -uroot -p123456 shutdown
重新啟動mysql
[[email protected] ~]# /etc/init.d/mysqld start
[[email protected] ~]# mysql -uroot -p123456
SQL Structured Query Language SQL結構化查詢語言 (SQL)
資料庫簡單操作:
建立資料庫時指定字元集:
mysql> create database template_gbk default character set gbk
mysql> show create database template_gbk
mysql> show databases;
mysql> select database(); 查看當前串連的資料庫
mysql> select now(); 查看目前時間
mysql> select user(); 查看目前使用者
mysql> select version(); 查看目前的版本
mysql> show tables;查看錶
刪除Mysql系統多餘帳號
drop user ‘template‘@‘localhost‘; 刪除使用者
如果drop刪除不了(一般是特殊字元或大寫)可以使用下面的方式刪除
mysql> delete from mysql.user where user=‘root‘ and host=‘localhost‘;
mysql> flush privileges;
建立Mysql使用者及賦予使用者授權
mysql> grant all on test.* to ‘template‘@‘localhost‘ identified by ‘123456‘;
mysql> flush privileges;
mysql> show grants for ‘template‘@‘localhost‘; 查看許可權
create 和grant 配合方法
mysql> create user ‘template‘@‘localhost‘ identefied by ‘123456‘;
mysql> grant all on dbname.* to ‘username‘@‘localhost‘; #賦予許可權
#授權區域網路內主機遠端連線資料庫
%匹配法
mysql> grant all on *.* to ‘someuser‘@‘%‘ identified by ‘123456‘;
子網路遮罩匹配法
mysql> grant all on *.* to ‘someuser‘@‘10.0.0.0/255.255.255.0‘ identified by ‘123456‘;
mysql -uroot -p123456 -h 10.0.0.7 -P 3306 遠端連線
revoke insert on test.* from ‘template‘@‘localhost‘; 收回許可權
mysql> show grants for [email protected]‘localhost‘; 查看許可權
1 SELECT
2 INSERT
3 UPDATE
4 DELETE
5 CREATE
6 DROP
7 REFERENCES
8 INDEX
9 ALTER
10 CREATE TEMPORARY TABLES
11 LOCK TABLES
12 EXECUTE
13 CREATE VIEW
14 SHOW VIEW
15 CREATE ROUTINE
16 ALTER ROUTINE
17 EVENT
18 TRIGGER
mysql> select * from mysql.user;
insert(增),delete(刪),update(改),select(查)
產生資料庫表後,要收回create 和drop授權
mysql> create database template; 建立資料庫
mysql> show create database template;查看建庫資訊
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| template | CREATE DATABASE `template` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
建表:
create table <表名>(
<欄位名 1><類型 1>,
...
<欄位名 n><類型 n>);
建表語句:
create table student(
id int(4) not null,
name char(20) not null,
age tinyint(2) not null default ‘0‘,
dept varchar(16) default null
);
mysql> show create table student\G
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(4) NOT NULL,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT ‘0‘,
`dept` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> desc student; 查看錶結構
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> show columns from student; 查看錶結構
索引就像是書的目錄,如果在欄位上建立了索引,那麼以索引列為查詢條件時可以加快查詢資料的速度。
建立主鍵索引
查詢資料庫,按主鍵索引是最快的,每個表只能有一個主鍵列,但是可以有多個普通索引列。主鍵列要求列的所有內容必須唯一,而索引列不要求內容必須唯一
mysql> create table student(
id int(4) not null AUTO_INCREMENT, #自增
name char(20) not null,
age tinyint(2) not null default ‘0‘,
dept varchar(16) default null,
primary key(id),
KEY index_name(name) #建立索引
);
建表後通過alter命令增加主鍵索引(不建議這樣幹)
mysql> alter table student change id id int primary key auto_increment;
mysql> alter table student drop index index_name; 刪除索引
mysql> drop index index_dept on student; 刪除索引
mysql> alter table student add index index_name(name); 添加普通索引
mysql> create index index_dept on student(dept(8)); 指定前n個字元建立索引
mysql> show index from student\G 查看索引
mysql> create index idn_name_dept on student(name,dept); 建立聯合索引,允許列上有自己的索引
mysql> create index ind_name_dept on student(name(8),dept(10)); 根據多個列前n個字元建立聯合索引
mysql> create unique index uni_ind_name on student(name); 建立唯一索引
問題1:既然索引可以加快查詢速度,那麼就給所有的列建立索引吧?
解答:因為索引不但佔用空間,更新資料庫時還需要維護索引資料,因此,索引試一把雙刃劍,並不是越多越好,例如:數十到幾百行的小表上無需建立索引,寫頻繁,讀少的業務要少建立索引
問題2:到底在哪些列上建立索引呢?
解答:select user,host from mysql.user where host=...,索引一定要建立在where後的條件列,而不是select後的選擇資料的列,另外,要盡量選擇在唯一值多的大表上建立索引。
基本條件:
1、要在表的列上建立索引
2、索引會加快查詢速度,但是會影響更新的速度,因為要維護索引
3、索引不是越多越好,要在頻繁查詢的where後的條件列上建立索引
4、小表或唯一值極少的列上不建索引,要在大表以及不同的內容多的列上建立索引
help alter table
Mysql資料庫的許可權、索引基本操作