欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码(2)

程序员文章站 2022-06-23 20:51:08
...

索引

索引的创建

1.使用CREATE INDEX语句创建索引

CREATE INDEX index_customers

ON mysql_test.customers(cust_name(3) ASC);

 

CREATE INDEX index_cust

ON mysql_test.customers(cust_name,cust_id)

USING BTREE;

如不指定,默认BTREE

2.使用CREATE TABLE语句创建索引

CREATE TABLE seller(

seller_id int NOT NULL AUTO_INCREAMENT,

seller_name char(50) NOT NULL,

seller_address char(50) NULL,

seller_contact char(50) NULL,

product_type int(5) NULL,

sales int NULL,

PRIMARY KEY(seller_id,product_type),

INDEX index_seller(sales)

);

3.使用ALTER TABLE语句创建索引

ALTER TABLE mysql_test.seller

ADD INDEX index_seller_name(seller_name);

索引的删除

1.使用DROP INDEX语句删除索引

DROP INDEX index_cust ON mysql_test.customers;

2.使用ALTER TABLE删除索引

ALTER TABLE mysql_test.customers

DROP PRIMARY KEY,

DROP INDEX index_customers;

 

 

视图

创建视图

CREATE OR REPLACE VIEW mysql_test.customers.view

AS

SELECT * FROM mysql_test.customers

WHERE cust_sex='M'

WITH CHECK OPTION;

注意WITH CHECK OPTION用于指定在可更新视图上所进行的修改都要符合SELECT

中所指定的限制条件。

删除视图与数据库、表差不多

修改视图

查看视图定义

更新视图数据

查询视图数据

 

 

 

 

数据完整性约束与表维护语句

CREATE TABLE customers(

cust_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

cust_name char(50) NOT NULL,

cust_sex int(1) NOT NULL DEFAULT 0,

cust_address char(50) NULL,

cust_contact char(50) NULL

)ENGINE=InnoDB;

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id),

FOREIGN KEY(cust_id)

REFERENCES customers(cust_id)

ON DELETE RESTRICT

ON UPDATE RESTRICT

);

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL

CHECK(cust_id IN(SELECT cust_id FROM customers)),

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id)

);

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id),

CHECK(order_price>=2000 AND order_amount<=5)

);

 

 

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

CONSTRAINT PRIMARY_KEY_ORDERS PRIMARY KEY(order_id),

CONSTRAINT FOREIGH_KEY_ORDERS FOREIGH KEY(cust_id)

REFERENCES customers(cust_id)

ON DELETE RESTRICT

ON UPDATE RESTRICT

);

 

 

ANALYZE TABLE mysql_test.customers;

更新数据库表的索引散列程度

 

 

CHECK TABLE mysql_test.customers;

检测表是否出现错误,该语句只对InnoDB、MyISAM、ARCHIVE、CSV表起作用

 

 

CHECKSUM TABLE mysql_test.customers;

获取一个校验和

 

 

OPTIMIZE TABLE mysql_test.customers;

优化数据库表

 

 

REPAIR TABLE

 

 

 

触发器

创建触发器

CREATE TRIGGER mysql_test.customers_insert.trigger AFTER INSERT

ON mysql_test.customers FOR EACH ROW SET @str='one customer added!';

 

SELECT @str;

 

 

DROP TRIGGER IF EXISTS mysql_test.customers_insert.trigger;

 

CREATE TRIGGER mysql_test.customers_insert.trigger AFTER INSERT

ON mysql_test.customers FOR EACH ROW SET @str=NEW.cust_id;

 

 

INSERT INTO mysql_test.customers

VALUES(NULL,'曾伟','F','长沙市','芙蓉区');

SELECT @str;

 

CREATE TRIGGER mysql_test.customers_update.trigger BEFORE UPDATE

ON mysql_test.customers FOR EACH ROW

SET NEW.cust_address=OLD.cust_contact;

 

UPDATE mysql_test.customers SET cust_address='武汉市'

WHERE cust_name='曾伟';

 

 

事件

SHOW VARIABLES LIKE 'EVENT_SCHEDULER';

 

 

SELECT @@ EVENT_SCHEDULER;

 

SELECT GLOBAL EVENT_SCHEDULER=1;

 

 

SELECT GLOBAL EVENT_SCHEDULER=TRUE;

 

创建事件

USE mysql_test;

DELIMITER $$

CREATE EVENT IF NOT EXISTS event_insert

ON SCHEDULER EVERY 1 MONTH

STARTS CURDATE+INTERVAL 1 MONTH

ENDS '2013-12-31'

DO

BEGIN

IF YEAR(CURDATE())<2013 THEN

INSERT INTO customers

VALUES(NULL,'戴军','M','北京市','海淀区');

       END IF;

END $$

 

修改事件

ALTER EVENT event_insert DISABLE;

 

ALTER EVENT event_insert ENABLE;

 

ALTER EVENT event_insert 

RENAME TO e_insert

 

DROP EVENT IF EXISTS e_insert;

 

存储过程与存储函数

DELIMITER !!

DELIMITER ;

 

DELIMITER $$

CREATE PROCEDURE sp_update_sex(IN cid INT,IN csex CHAR(1))

BEGIN

UPDATE customers SET cust_sex=csex WHERE cust_id=cid;

END $$

 

DECLARE cid INT(10);

 

SET cid=910;

 

DELIMITER $$

CREATE PROCEDURE sp_sumofrow(OUT ROWS INT)

BEGIN

DECLARE cid INT;

DECLARE FOUND BOOLEAN DEFAULT TRUE;

DECLARE cur_cid CURSOR FOR 

SELECT cust_id FROM customers;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET FOUND=FALSE;

SET ROES=0;

OPEN cur_cid;

FETCH cur_cid INTO cid;

WHILE FOUND DO

SET ROWS=ROWS+1;

FETCH cur_cid INTO cid;

END WHILE

CLOSE cur_cid;

END $$

 

本例中定义了一个CONTINUE HANDLER句柄,它是在条件出现时执行的代码

用于控制循环语句,实现游标的下移

 

调用存储过程

CALL sp_update_sex(909,'M');

修改存储过程

删除存储过程

DROP PROCEDURE sp_update_sex;

 

 

存储函数

DELIMITER $$

CREATE FUNCTION fn_search(cid INT)

RETURNS CHAR(2)

DETERMINISTIC

BEGIN

DECLARE SEX CHAR(2)

SELECT cust_sex INTO SEX FROM customers

WHERE cust_id=cid;

IF SEX IS NULL THEN

RETURN(SELECT'没有客户');

ELSE IF SEX='F' THEN

RETURN(SELECT'女');

ELSE RETURN(SELECT'男');

END IF;

END IF;

END $$

 

 

SELECT fn_search(904);

 

DROP FUNCTION IF EXISTS fn_search;

访问控制与安全管理

1.用户账号管理

select user from mysql.user;

1.1创建用户账号

SELECT PASSWORD(456);

CREATE USER 'zhangsan'@'localhost'IDENTIFIED BY '123'

'lisi'@'localhost'IDENTIFIED BY PASSWPRD

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

1.2删除用户

DROP USER lisi@ localhost

1.3修改用户账号

RENAME USER 'zhangsan'@'localhost'TO'wangwu'@'localhost';

1.4修改用户口令

SELECT PASSWORD('hello');

SET PASSWORD FOR 'wangwu'@'localhost'

='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

2.账户权限管理

SHOW GRANTS FOR 'zhangsan'@'locaalhost';

2.1权限的授予

GRANT SELECT(cust_id,cust_name)

ON mysql_test.customers

TO 'zhangsan'@'locaalhost';

GRANT SELECT,UPDATE

ON mysql_test.customers

TO 'liming'@'localhost' IDENTIFIED BY '123',

'huang'@'localhost' IDENTIFIED BY '789';

GRANT ALL

ON mysql_test.*

TO 'wangwu'@'localhost';

GRANT CREATE USER

ON *.*

TO 'wangwu'@'localhost';

2.2权限的转移与限制

GRANT SELECT,UPDATE

ON mysql_test.customers

TO 'zhou'@'localhost' IDENTIFIED BY '123'

WITH GRANT OPTION;

 

GRANT DELETE

ON mysql_test.customers

TO 'zhou'@'localhost'

WITH MAX_QUERIES_PER_HOUR 1;

 

2.3权限的撤销

REVOKE SELECT

ON mysql_test.customers

TO 'zhou'@'localhost';

 

 

 

备份与恢复

1.使用sql语句备份恢复表数据

SELECT * FROM mysql_test.customers

INTO OUTFILE 'C:/BACKUP/backupfile.txt'

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '?';

 

 

LOAD DATA INFILE 'C:/BACKUP/backupfile.txt'

INTO TABLE mysql_test.customers_copy

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '?';

2.使用客户端恢复备份表数据

mysqldump -h localhost -u root -p123456 mysql_test customers>c:\backup\file.sql

注意:如果是本地服务器-h项可以省略

mysqldump -u root -p123456 --databases mysql_test mysql>c:\backup\data.sql

 

mysqldump -u root -p123456 --all-databases>c:\backup\alldata.sql

 

mysqldump -u root -p123456 --tab=c:\backup\mysql_test

 

mysql -u root -p123456 mysql_test<mysql_test.sql

 

mysql -u root -p123456 customers<c:\backup\customers.sql

 

mysqlimport -u root -p123456 --low-priority --replace mysql_test c:\backup\customers.txt

 

mysqlbinlog binlog.000001

 

mysqlbinlog binlog.000001>c:\backup\bin_log000001.txt

 

mysqldump -u root -p123456 mysql_test<alldata.sql

 

mysqlbinlog bin_log.000001|mysql -u root -p123456

 

mysqlbinlog bin_log.000002|mysql -u root -p123456

 

PHP的mysql数据库编程

<? php

$string="hello";

echo $string;

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456");

if(!$con){

echo "连接失败!<br>";

echo "错误编号:".mysql_errorno()."<br>";

echo "错误信息:".mysql_error()."<br>";

die();

}

echo "连接成功!<br>";

?>

 

<? php

$server="localhost:3306";

$user="root";

$pwd="123456";

$con=mysql_pconnect($server,$user,$pwd);

if(!$con){

die("连接失败!".mysql_error());

}

echo "MYSQL服务器:$server<br>用户名:$user<br>";

echo "使用函数mysql_pconnect()永久链接数据库。<br>";

?>

 

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456");

if(mysql_errno()){

echo "数据库服务器连接失败!<br>";

die();

}

mysql_select_db("mysql_test",$con);

if(mysql_errno()){

echo "数据库服务器连接失败!<br>";

die();

}

echo "数据库选择成功!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="INSERT INTO customers(cust_id,cust_name,cust_sex,cust_address,cust_contact)";

$sql=$sql."VALUES(NULL,'李中华','M','深圳市','南山区')";

if($sql,$con){

echo "客户添加成功!<br>";

}

else

echo "客户添加失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="UPDATE customers SET cust_address='广州市'";

$sql=$sql."WHERE cust_name='李中华'";

if(mysql_query($sql,$con))

echo "客户地址修改成功!<br>";

else

echo "客户地址修改失败!<br>";

?>

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="DELETE FROM customers";

$sql=$sql."WHERE cust_name='李中华'";

if(mysql_query($sql,$con))

echo "客户删除成功!<br>";

else

echo "客户删除失败!<br>";

?>

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT cust_name FROM customers";

$sql=$sql."WHERE cust_id=916";

$result=mysql_query($sql,$con);

if($result){

echo "客户查询成功!<br>";

$arry=mysql_fetch_array($result,MYSQL_NUM);

if($array){

echo "读取到客户信息!<br>";

echo "所要查询客户的姓名是:".$array[0];

}

else

echo "没有读取到客户信息!<br>"

 

}

else

echo "客户查询失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT * FROM customers";

$sql=$sql."WHERE cust_sex='F'";

$result=mysql_query($sql,$con);

if($result){

echo "查询成功!<br>";

$num=mysql_num_rows($result);

echo "数据库mysql_test中女性顾客数为:".$num."位";

}

else

echo "查询失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT * FROM customers";

$sql=$sql."WHERE cust_sex='F'";

$result=mysql_query($sql,$con);

if($result){

echo "查询成功!<br>";

if(mysql_data_seek($result,2)){

$array=mysql_fetch_array($result,MYSQL_NUM);

echo "数据库mysql_test中第三位女性顾客是:".$array[1];

}

else

echo "记录定位失败!<br>";

}

else

echo "查询失败!<br>";

?>

 

 

                <? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

echo "已成功建立与MYSQL服务器的连接!<br>";

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

echo "已成功选择数据库mysql_test!<br>";

mysql_close($con) or die("关闭与MYSQL数据库服务器的连接失败!<br>");

echo "已成功关闭与MYSQL数据库服务器的连接!<br>";

?>