찾다

bitsCN.com

创建数据库luowei
mysql> CREATE DATABASE luowei;

使用数据库
mysql> use luowei

创建表study
mysql> CREATE TABLE study ( ID bigint(20) NOT NULL AUTO_INCREMENT UNIQUE,  Name varchar(255) NOT NULL, Age int(10),Gender enum('F','M')  DEFAULT 'M');

查询表study;
mysql> SELECT * FROM study;

查看表的结构:
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
+--------+---------------+------+-----+---------+----------------+

插入数据;
mysql> INSERT INTO study (Name) VALUE ('luowei'); //单个插入
mysql> INSERT INTO study (Name) VALUE ('Qi'),('Ro'),('RQ'); //批量插入
mysql> INSERT INTO study SET Name='Hua';  //使用SET插入
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | M      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | M      |
|  5 | Hua    | NULL | M      |
+----+--------+------+--------+
5 rows in set (0.00 sec)
这是插入数据后的一个简单的表的内容

修改表的数据
mysql> UPDATE study SET Gender='F' WHERE ID=2; //把ID=2的Gender改为F
mysql> UPDATE study SET Gender='F' WHERE ID IN (4,5);//批量处理
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | Hua    | NULL | F      |
+----+--------+------+--------+

删除表中的数据
mysql> DELETE FROM study WHERE ID=5;//删除指定的行
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
+----+--------+------+--------+
但是这个时候如果我们在再次插入的话ID号会从原来删除的编号增加
mysql> SELECT LAST_INSERT_ID();//显示上次插入的是第几个
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
mysql> INSERT INTO study (Name) VALUE ('aQ');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  6 | aQ     | NULL | M      |
+----+--------+------+--------+
看到了吧,不是依次增长的,而是有间隔,现在我们在删除了ID为6的行,然后插入设置他的ID为5,接着再自动插入;
mysql> DELETE FROM study WHERE ID=6;
mysql> INSERT INTO study SET ID=5,Name='pk';
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | pk     | NULL | M      |
|  7 | jk     | NULL | M      |
+----+--------+------+--------+
可以看出还是不会按照我们的意思让他接着自动增长,这个时候我们可以通过设置,让他重新按照我们设置的为起点自动增长
mysql> DELETE FROM study WHERE ID=7;
mysql> ALTER TABLE study AUTO_INCREMENT=5;//设置自动增长的起点
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> INSERT INTO study (Name) VALUE ('OL');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | pk     | NULL | M      |
|  6 | jk     | NULL | M      |
|  7 | OL     | NULL | M      |
+----+--------+------+--------+
又OK了,我估计QQ在设置QQ号的时候也是通过这种方式,保留小于5位的QQ号,所有大家用的都是7位以上的(题外话,呵呵)。

修改表结构
如果想插入一个新的字段,可以使用ALTER来修改
mysql> DESC study;//原本表的结构
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
+--------+---------------+------+-----+---------+----------------+
mysql> ALTER TABLE study ADD Work INT ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
默认插入最后一行,如果想插入指定的行,可以使用AFTER,FIRST等参数
mysql> ALTER TABLE study ADD Master VARCHAR(30) AFTER Gender;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| Work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
这就把新插入的字段放在了Gender的后面了
如果我们想把原来的表中字段的名字改一下,比如我想把Work改成work
mysql> ALTER TABLE study CHANGE Work work INT;//修改表中的字段
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
可以实现效果
当让还可以通过使用MODIFY来试下对表中字段的属性进行设置
mysql> ALTER TABLE study MODIFY work VARCHAR(30) NOT NULL ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| work   | varchar(30)   | NO   |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
但是如果你表中原本work中没有字段的话,会有warning,所以在你做的时候可以先添加数据,然后在修改。
随着发展,我发现后面的work这个字段没用了,想删除study表中的这个属性
mysql> ALTER TABLE study DROP work;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
当然如果我们表中有索引(目前),也可以使用DROP删除索引
mysql> SHOW INDEX FROM study;//查看表的索引
mysql> ALTER TABLE study ADD INDEX index_name(Name);//添加索引
也可以私用KEY(mysql> ALTER TABLE study ADD KEY index_name(Name);)
mysql> SHOW INDEX FROM study;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| study |          0 | ID         |            1 | ID          | A         |           7 |     NULL | NULL   |      | BTREE      |         |
| study |          1 | index_name |            1 | Name        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
mysql> ALTER TABLE study DROP INDEX index_name;//删除索引
现在我觉得表明有点长,想换一个短的来方便下面的实验,当然在实际的过程中,我们应该见名知意
mysql> ALTER TABLE study RENAME TO st;//把表名从study改成st
mysql> SHOW TABLES;
+------------------+
| Tables_in_luowei |
+------------------+
| st               |
+------------------+
想查看当前的数据库可以使用一下命令
mysql> SELECT DATABASE();
mysql> SHOW TABLES;//显示当前数据库中的表

mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      | NULL   |
|  2 | Qi     | NULL | F      | NULL   |
|  3 | Ro     | NULL | M      | NULL   |
|  4 | RQ     | NULL | F      | NULL   |
|  5 | pk     | NULL | M      | NULL   |
|  6 | jk     | NULL | M      | NULL   |
|  7 | OL     | NULL | M      | NULL   |
+----+--------+------+--------+--------+
这里我只有一个表,现在我修改一下表中的数据,把Master的类型改为INT,并添加一些数据在里面
mysql> ALTER TABLE st CHANGE MODIFY Master INT;
mysql> UPDATE st SET Master=1 WHERE ID=1;
mysql> UPDATE st SET Master=2 WHERE ID=2;
mysql> UPDATE st SET Master=3 WHERE ID=3;
mysql> UPDATE st SET Master=4 WHERE ID=4;
mysql> UPDATE st SET Master=7 WHERE ID=5;
mysql> UPDATE st SET Master=8 WHERE ID=6;
mysql> UPDATE st SET Master=5 WHERE ID=7;
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      |      1 |
|  2 | Qi     | NULL | F      |      2 |
|  3 | Ro     | NULL | M      |      3 |
|  4 | RQ     | NULL | F      |      4 |
|  5 | pk     | NULL | M      |      7 |
|  6 | jk     | NULL | M      |      8 |
|  7 | OL     | NULL | M      |      5 |
+----+--------+------+--------+--------+
现在表的基本情况如上所示。当然我们为了方便记录Master,使用是INT来标,其实Master是一个姓名,所以我们再建立一个新表mt,来记录Master的对应的关系
mysql> CREATE TABLE mt(
    -> id INT NOT NULL UNIQUE AUTO_INCREMENT ,
    -> name VARCHAR(30) NOT NULL );
mysql> INSERT INTO mt (name) VALUE ('A');
......
自己多插入几行,我这里就省略了
mysql> SELECT * FROM mt;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
|  4 | D    |
|  5 | E    |
|  6 | F    |
+----+------+
好了现在两个表准备好了,接下来我将做一下多表之间的查询
多表之间的查询可以分为:
  交叉查询:笛卡尔乘积,两表相乘;
  内连接:对称连接,就是显示两个表中都有的,一个表中如果没有,就不显示了;
  外连接:非对称连接
    左外连接:LEFT JOIN ON 左表中的都显示,右表中无的话显示为NULL
    右外连接:RIGHT JOIN ON 右表中的都显示,左表中无的话显示为NULL
  自连接:一个表中的一列建立在同张表的另一列;
  UNION:连接两个表;
接下来分别对上面的情况进行实验;
1.交叉查询:
mysql> SELECT * FROM st,mt;
42 rows in set (0.00 sec)//中间的数据就省略了,这里的结果就是两个表的行数相乘的结果;
2.内连接:
mysql> SELECT st.Name,mt.name FROM st,mt WHERE st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| OL     | E    |
+--------+------+
3.左外连接:
mysql> SELECT st.Name,mt.name FROM st LEFT JOIN  mt  ON st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| pk     | NULL |
| jk     | NULL |
| OL     | E    |
+--------+------+
这时候我们可以看到,凡是左表中有的,都显示了,右表中没有的都显示为NULL了;
4.右外连接:
mysql> SELECT st.Name,mt.name FROM st RIGHT JOIN  mt  ON st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| OL     | E    |
| NULL   | F    |
+--------+------+
5.自连接:
mysql> SELECT k1.Name,k2.Gender FROM st AS k1,st AS k2 WHERE k1.ID = k2.Master;
+--------+--------+
| Name   | Gender |
+--------+--------+
| luowei | M      |
| Qi     | F      |
| Ro     | M      |
| RQ     | F      |
| OL     | M      |
| pk     | M      |
+--------+--------+
6.UNION;
mysql> SELECT ID AS new_id,Name AS new_name FROM st UNION SELECT id AS new_id,name AS new_name FROM mt;
+--------+----------+
| new_id | new_name |
+--------+----------+
|      1 | luowei   |
|      2 | Qi       |
|      3 | Ro       |
|      4 | RQ       |
|      5 | pk       |
|      6 | jk       |
|      7 | OL       |
|      1 | A        |
|      2 | B        |
|      3 | C        |
|      4 | D        |
|      5 | E        |
|      6 | F        |
+--------+----------+
13 rows in set (0.00 sec)这样就把两个表连接到了一起了。

多表操作就到此了,接下来要说的是数据库中的视图,子查询,事务,同步的相关知识了;
我就以st这个表为基础:
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      |      1 |
|  2 | Qi     | NULL | F      |      2 |
|  3 | Ro     | NULL | M      |      3 |
|  4 | RQ     | NULL | F      |      4 |
|  5 | pk     | NULL | M      |      7 |
|  6 | jk     | NULL | M      |      8 |
|  7 | OL     | NULL | M      |      5 |
+----+--------+------+--------+--------+
视图:就是建立在基表上执行查询语句的一系列的虚表
创建视图:
mysql> CREATE VIEW view AS SELECT ID,Name,Gender FROM st;//创建一个查询显示ID,Name,Gender的视图;
mysql> SELECT * FROM view;
+----+--------+--------+
| ID | Name   | Gender |
+----+--------+--------+
|  1 | luowei | M      |
|  2 | Qi     | F      |
|  3 | Ro     | M      |
|  4 | RQ     | F      |
|  5 | pk     | M      |
|  6 | jk     | M      |
|  7 | OL     | M      |
+----+--------+--------+
删除视图可以使用
mysql> DROP VIEW view;
子查询语句:(其实MySQL的子查询支持的还不是很好)
mysql> SELECT * FROM view WHERE ID > 0;
我就借用刚建立的视图进行查询,其实这个是多此一举的做法,呵呵,只是演示一下效果,当让在工作中可能会遇到更多的问题的。

事务:transact
事务就是几个Sql语句要么都执行,要么都不执行,这样就防治一方执行,另一方没执行,从而产生虚拟的假象,比如A通过银行向B转账,如果这个时候A刚转出去,B那边的断电了(假设,其实这样的事出现的概率还是蛮小的,呵呵),所以等A和B见面之后,就说不清了,所以事务就是如果两个都没实现,就是A发送成功,B接受成功,才能算是真正的成功,所以这样就能避免不必要的损失。
接下来介绍一下事务隔离的级别:
1.读未提交 READ UNCOMMITED
2.读提交 READ COMMITED
3.可重读 REPEATABLE READ 默认
4.串行化 SERIABLIZABLE
从1-->4隔离级别依次增加,并发性依次降低
mysql> SHOW VARIABLES LIKE 'tx_isolation';//查看系统使用的默认的隔离级别
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

但是如果我们的数据库使用的引擎是MyISAM的话,就不支持事务,查看数据库使用的引擎命令如下
mysql> SHOW ENGINES;或使用SHOW TABLE STATUS LIKE 'st';或使用SHOW TABLE STATUS ;都能查看
+------------+---------+----------------------------------------------------------------+
| Engine     | Support | Comment                                                        |
+------------+---------+----------------------------------------------------------------+
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      |
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     |
| BerkeleyDB | YES     | Supports transactions and page-level locking                   |
| BLACKHOLE  | NO      | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE    | NO      | Example storage engine                                         |
| ARCHIVE    | NO      | Archive storage engine                                         |
| CSV        | NO      | CSV storage engine                                             |
| ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables                 |
| FEDERATED  | NO      | Federated MySQL storage engine                                 |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
| ISAM       | NO      | Obsolete storage engine                                        |
+------------+---------+----------------------------------------------------------------+
显示为DEFAULT的是默认使用的引擎,应为这个时候数据库不支持事务,为了演示事务的效果,我把mysql的引擎改为InnoDB ,使用如下命令:
mysql> SET SESSION storage_engine = InnoDB;
然后在这个引擎的基础上建立一个表
mysql> CREATE TABLE tt (
    -> tid INT UNIQUE NOT NULL AUTO_INCREMENT,
    -> tname VARCHAR(30) NOT NULL,
    -> tage INT);
插入数据如下图所示,当然你可以自己随便添加表中的数据
mysql> SELECT * FROM tt;
+-----+-------+------+
| tid | tname | tage |
+-----+-------+------+
|   1 | ser   | NULL |
|   2 | linux | NULL |
|   3 | php   | NULL |
+-----+-------+------+
查看当前表的存储引擎
mysql> SHOW TABLE STATUS LIKE 'tt';
显示的结果是InnoDB的引擎;
1.设置为READ UNCOMMITTED(读未提交)的级别
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;//修改隔离级别为READ UNCONMMITED显示为REPEATABLE-READ
mysql> SHOW VARIABLES LIKE 'tx_isolation';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| tx_isolation  | READ-UNCOMMITTED |
+---------------+------------------+
这个级别下,如果两个事务同时进行,任何一方的改变,对方都能看到,因为我们在设置的时候采用的是SESSION,会话的模式,所以两个终端都要进行READ UNCOMMITTED设置

MySQL详细的操作_MySQL

所以这个的设置的并发性最好,但是受到的影响却是最大的
2.设置为READ COMMITED(读提交)级别
这个级别下,当其中的任意一个事务提交了,其他处于事务状态的就能同步到信息,如下图是没有提交之前的图,这个时候还不能看到

MySQL详细的操作_MySQL
 
如果B的事务提交了,再来看看这个结果,如下图所示:

MySQL详细的操作_MySQL

尽管A没有提交,但是也能看到信息了
3.设置为REPEATABLE READ(可重读)级别
如果设置为这个级别的话,两个同时进行的事务,相互不受影响,只用当两个事务都提交了才能看到所有变化的信息,否则,各自只能看到自己完成的
我现在打开两个终端A、B,同时进入事务
mysql> START TRANSACTION;//A进入事务状态
mysql> START TRANSACTION;//B进入事务状态
然后我在B事务状态下向表进行插入一行数据,然后在两个表中都查看,结果发现数据不一样,如下图所示:

MySQL详细的操作_MySQL

如果我现在把B的事务提交了,再在A、B上查看,发现只有B上的有新插入的一行,而A任然没有,如图所示:

MySQL详细的操作_MySQL

如果我现在把A的也提交了,在查看的话,两个就会出现数据同步了,如图所示:

MySQL详细的操作_MySQL

这就是REPEATABLE READ级别的效果,就是两个事务操作的时候相互不干扰,只有当两个事务都提交了,数据才会同步。
4.设置为SERIABLIZABLE级别
这个时候只有当前一个事务执行完成并提交了,下一个事务才开始,做了更加严格的限制,所以一般不做这样的级别限制
 
同步:(clock)
  通过锁机制来解决同步问题
  锁:
    共享锁(读锁):
    独占锁(写锁): 
    写锁的优先级高于读锁
    锁级别:
      表锁,行锁,页锁(内存空间)
    锁的实现:
      服务器级别的;只能实现表锁
      存储引擎级别的:可以实现行锁
    >LOCK TABLES tab_name READ;加锁
    >UNLOCK TABLES;释放锁
    (注意:如果在InnoDB中,定义时候并不生效,只有真正的事务开始,
     定义的锁才生效)
    降低粒度,可以更好的支持并发性,这样锁的颗粒就越小,类似行锁,锁的
    范围小一些。
 
MYSQL的用户管理:
创建用户
CREATE USER username@host
删除用户
DROP USER username@host
授权
GRANT PRIV_LIST ON db.table TO username@host [IDENTIFIED BY 'redhat'];
收回权限
REVOKE priv_list ON db.table FROM username@host;
WITH GRANT OPTION 同时把授权也一并授权给他
设置其使用的资源:
WITH MAX_QUERIES_PER_HOUT N;每个小时只能做N次查询
WITH MAX_UPDATES_PER_HOUT N每个小时只能做N次更新
WITH MAX_CONNECTIONS_PER_HOUT N  每个小时只能做N次连接
WITH MAX_USER_CONNECTIONS N 每个用户同时最大连接数
FLUSH USER_RESOURCES;
GRANT SELECT(name) ON db.table TO uername@host;字段级别的权限
执行存储过程的权限
GRANT EXECUTE ON XXXX TO username@host
 
 
忘记MySQL的密码:
方法1.重装数据库
方法2.
vim /etc/init.d/mysqld
先停止MySQL服务
#service mysqld stop
找到mysqld的二进制文件的位置,我这里就在/user/local/mysql/下
#/user/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking & 后台运行安全模式
然后连接数据库
#mysql
>use mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='localhost';
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='127.0.0.1';
#killall mysqqld
#service mysqld start
#mysql -uroot -p  登录
 
 
 
 
 
作者 “IT梦-齐-分享”

bitsCN.com
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
산성 특성 (원자력, 일관성, 분리, 내구성)을 설명하십시오.산성 특성 (원자력, 일관성, 분리, 내구성)을 설명하십시오.Apr 16, 2025 am 12:20 AM

산성 속성에는 원자력, 일관성, 분리 및 내구성이 포함되며 데이터베이스 설계의 초석입니다. 1. 원자력은 거래가 완전히 성공적이거나 완전히 실패하도록합니다. 2. 일관성은 거래 전후에 데이터베이스가 일관성을 유지하도록합니다. 3. 격리는 거래가 서로를 방해하지 않도록합니다. 4. 지속성은 거래 제출 후 데이터가 영구적으로 저장되도록합니다.

MySQL : 데이터베이스 관리 시스템 대 프로그래밍 언어MySQL : 데이터베이스 관리 시스템 대 프로그래밍 언어Apr 16, 2025 am 12:19 AM

MySQL은 데이터베이스 관리 시스템 (DBMS) 일뿐 만 아니라 프로그래밍 언어와 밀접한 관련이 있습니다. 1) DBMS로서 MySQL은 데이터를 저장, 구성 및 검색하는 데 사용되며 인덱스 최적화는 쿼리 성능을 향상시킬 수 있습니다. 2) SQL과 같은 ORM 도구를 사용하여 Python에 내장 된 SQL과 프로그래밍 언어를 결합하면 작업을 단순화 할 수 있습니다. 3) 성능 최적화에는 인덱싱, 쿼리, 캐싱, 라이브러리 및 테이블 부서 및 거래 관리가 포함됩니다.

MySQL : SQL 명령으로 데이터 관리MySQL : SQL 명령으로 데이터 관리Apr 16, 2025 am 12:19 AM

MySQL은 SQL 명령을 사용하여 데이터를 관리합니다. 1. 기본 명령에는 선택, 삽입, 업데이트 및 삭제가 포함됩니다. 2. 고급 사용에는 조인, 하위 쿼리 및 집계 함수가 포함됩니다. 3. 일반적인 오류에는 구문, 논리 및 성능 문제가 포함됩니다. 4. 최적화 팁에는 인덱스 사용, 선택*을 피하고 한계 사용이 포함됩니다.

MySQL의 목적 : 데이터를 효과적으로 저장하고 관리합니다MySQL의 목적 : 데이터를 효과적으로 저장하고 관리합니다Apr 16, 2025 am 12:16 AM

MySQL은 데이터 저장 및 관리에 적합한 효율적인 관계형 데이터베이스 관리 시스템입니다. 장점에는 고성능 쿼리, 유연한 트랜잭션 처리 및 풍부한 데이터 유형이 포함됩니다. 실제 애플리케이션에서 MySQL은 종종 전자 상거래 플랫폼, 소셜 네트워크 및 컨텐츠 관리 시스템에서 사용되지만 성능 최적화, 데이터 보안 및 확장성에주의를 기울여야합니다.

SQL 및 MySQL : 관계 이해SQL 및 MySQL : 관계 이해Apr 16, 2025 am 12:14 AM

SQL과 MySQL의 관계는 표준 언어와 특정 구현의 관계입니다. 1.SQL은 관계형 데이터베이스를 관리하고 운영하는 데 사용되는 표준 언어로, 데이터 추가, 삭제, 수정 및 쿼리를 허용합니다. 2.MySQL은 SQL을 운영 언어로 사용하고 효율적인 데이터 저장 및 관리를 제공하는 특정 데이터베이스 관리 시스템입니다.

InnoDB Redo Logs 및 Undo Logs의 역할을 설명하십시오.InnoDB Redo Logs 및 Undo Logs의 역할을 설명하십시오.Apr 15, 2025 am 12:16 AM

InnoDB는 Redologs 및 Undologs를 사용하여 데이터 일관성과 신뢰성을 보장합니다. 1. Redologs는 사고 복구 및 거래 지속성을 보장하기 위해 데이터 페이지 수정을 기록합니다. 2. 결점은 원래 데이터 값을 기록하고 트랜잭션 롤백 및 MVCC를 지원합니다.

설명 출력 (유형, 키, 행, 추가)에서 찾아야 할 주요 메트릭은 무엇입니까?설명 출력 (유형, 키, 행, 추가)에서 찾아야 할 주요 메트릭은 무엇입니까?Apr 15, 2025 am 12:15 AM

설명 명령에 대한 주요 메트릭에는 유형, 키, 행 및 추가가 포함됩니다. 1) 유형은 쿼리의 액세스 유형을 반영합니다. 값이 높을수록 Const와 같은 효율이 높아집니다. 2) 키는 사용 된 인덱스를 표시하고 NULL은 인덱스가 없음을 나타냅니다. 3) 행은 스캔 한 행의 수를 추정하여 쿼리 성능에 영향을 미칩니다. 4) Extra는 최적화해야한다는 Filesort 프롬프트 사용과 같은 추가 정보를 제공합니다.

설명에서 임시 상태를 사용하고 피하는 방법은 무엇입니까?설명에서 임시 상태를 사용하고 피하는 방법은 무엇입니까?Apr 15, 2025 am 12:14 AM

Temporary를 사용하면 MySQL 쿼리에 임시 테이블을 생성해야 할 필요성이 있으며, 이는 별개의, 그룹 비 또는 비 인덱스 열을 사용하여 순서대로 발견됩니다. 인덱스 발생을 피하고 쿼리를 다시 작성하고 쿼리 성능을 향상시킬 수 있습니다. 구체적으로, 설명 출력에 사용되는 경우, MySQL은 쿼리를 처리하기 위해 임시 테이블을 만들어야 함을 의미합니다. 이것은 일반적으로 다음과 같은 경우에 발생합니다. 1) 별개 또는 그룹을 사용할 때 중복 제거 또는 그룹화; 2) OrderBy가 비 인덱스 열이 포함되어있을 때 정렬하십시오. 3) 복잡한 하위 쿼리 또는 조인 작업을 사용하십시오. 최적화 방법은 다음과 같습니다. 1) Orderby 및 GroupB

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.