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

1小时学会MySQL基础

程序员文章站 2022-05-18 14:29:15
1小时学会mysql基础。 mysql入门 1. (database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的api用于创建,访问,管理,搜索...

1小时学会mysql基础。

mysql入门

1. (database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的api用于创建,访问,管理,搜索和复制所保存的数据。

2. 使用关系型数据库管理(rdbms)来存储和管理的大数据量。关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

3. rdbms特点:

1.数据以表格的形式出现

2.每行为各种记录名称

3.每列为记录名称所对应的数据域

4.许多的行和列组成一张表单

5.若干的表单组成database

4. rdbms 术语

冗余:存储两倍数据,冗余可以使系统速度更快。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

外键:外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性

5. mysql是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

mysql管理

6. 启动及关闭 mysql服务器:

(1) 检查mysql服务器是否启动:

ps -ef | grepmysqld

(2) 启动mysql服务器:

root@host# cd/usr/bin

./safe_mysqld&

(3) 关闭目前运行的 mysql 服务器:

root@host# cd/usr/bin

./mysqladmin-u root -p shutdown

enterpassword: ******

7. mysql 用户设置

在 mysql 数据库中的 user 表添加新用户:

root@host# mysql -u root –p //选择数据库

enter password:*******

mysql> use mysql;

database changed

mysql> insert into user

(host, user, password,

select_priv, insert_priv,update_priv) //设置权限y

values ('localhost', 'guest',

password('guest123'), 'y', 'y','y');

query ok, 1 row affected (0.20 sec)

mysql> flush privileges;

注意需要执行 flush privileges 语句。这个命令执行后会重新载入授权表。

另外一种添加用户的方法为通过sql的 grant命令

mysql> grantselect,insert,update,delete,create,drop

-> on tutorials.*

-> to 'zara'@'localhost'

-> identified by'zara123';

8. 管理mysql的命令

use 数据库名 :选择要操作的mysql数据库:

mysql> use w3cschool;

database changed

show databases: 列出 mysql 数据库管理系统的数据库列表:

mysql> showdatabases;

show tables: 显示指定数据库所有表,用该命令前需用 use 命令选择操作的数据库。

mysql> usew3cschool;

database changed

mysql> show tables;

show columns from 数据表:显示数据表的属性,属性类型,主键信息,是否null,默认值等其他信息。

mysql> show columnsfrom w3cschool_tbl;

+-----------------+--------------+------+-----+---------+-------+

| field | type | null | key | default | extra |

+-----------------+--------------+------+-----+---------+-------+

show index from 数据表:显示数据表的详细索引信息,包括primary key(主键)。

show table status like 数据表\g: 该命令将输出mysql数据库管理系统的性能及统计信息。

mysql> show tablestatus from w3cschool; # 显示数据库 w3cschool 中所有表的信息

mysql> show tablestatus from w3cschool like 'w3cschool%'; #表名以w3cschool开头的表的信息

mysql> show tablestatus from w3cschool like 'w3cschool%'\g; #加上 \g,查询结果按列打印

9. php mysql函数格式:mysql_function(value,value,...);

mysql 连接

10.使用mysql二进制方式连接

[root@host]# mysql -uroot -p

enter password:******

登录成功后会出现mysql> 命令提示窗口,你可以在上面执行任何 sql 语句。

退出 mysql> 命令提示窗口可以使用exit 命令:mysql> exit

11.使用 php脚本连接 mysql

php 提供了 mysql_connect() 函数来连接数据库。

connectionmysql_connect(server,user,passwd,new_link,client_flag);5各参数均可选

使用php的mysql_close() 函数来断开与mysql数据库的链接。

bool mysql_close (resource $link_identifier );

通常不要用mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。

mysql_close() 不会关闭由 mysql_pconnect() 建立的持久连接

$conn = mysql_connect($dbhost, $dbuser, $dbpass);

if(! $conn )

{

die('could not connect: ' .mysql_error());

}

echo 'connected successfully';

mysql_close($conn);

mysql 创建/删除数据库

12.使用 mysqladmin创建数据库

用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库。

[root@host]#mysqladmin -u root -pcreate/drop w3cschool

enter password:*****

13.使用 php脚本创建数据库

php使用 mysql_query 函数来创建或者删除 mysql 数据库。

bool mysql_query( sql, connection);

$conn = mysql_connect($dbhost,$dbuser, $dbpass);

if(! $conn )

{

die('连接错误: ' . mysql_error());

}

echo '连接成功
';

$sql= 'create/drop database w3cschool';

$retval= mysql_query( $sql, $conn );

if(! $retval )

{

die('创建数据库失败: ' . mysql_error());

}

echo "数据库 w3cschool创建成功\n";

mysql_close($conn);

mysql 选择数据库

14.使用php脚本选择mysql数据库

php 提供了函数 mysql_select_db来选取一个数据库。

bool mysql_select_db( db_name,connection );

$conn = mysql_connect($dbhost,$dbuser, $dbpass);

if(! $conn )

{

die('连接失败: ' . mysql_error());

}

echo '连接成功';

mysql_select_db('w3cschool' );

mysql_close($conn);

mysql 创建/删除数据表

15.mysql 创建数据表

创建mysql数据表需要以下信息:

表名

表字段名

定义每个表字段

创建语法:create table table_name (column_name column_type);

删除语法:drop table table_name ;

以下例子中我们将在 w3cschool 数据库中创建数据表w3cschool_tbl:

tutorials_tbl(

tutorial_id int not null auto_increment,

tutorial_title varchar(100) not null,

tutorial_author varchar(40) not null,

submission_date date,

primary key ( w3cschool_id )

);

16.通过命令提示符创建表

使用 sql 语句 create table 来创建数据表。

mysql> create table w3cschool_tbl(

-> w3cschool_id int notnull auto_increment,

-> w3cschool_titlevarchar(100) not null,

-> w3cschool_authorvarchar(40) not null,

-> submission_date date,

-> primary key (w3cschool_id )

-> );

mysql命令终止符为分号 (;) 。

17.使用php脚本创建/删除数据表或插入数据

语法:bool mysql_query( sql, connection);

$sql = "create tabletutorials_tbl( "创建

"tutorial_id int notnull auto_increment, ".

"tutorial_titlevarchar(100) not null, ".

"tutorial_authorvarchar(40) not null, ".

"submission_datedate, ".

"primary key (tutorial_id )); "

;

$sql = "drop tablew3cschool_tbl";删除

mysql_select_db( 'tutorials' );

$retval = mysql_query( $sql, $conn); //判断是否成功而设置的参数;

if(! $retval )

{

die('数据表创建失败: ' . mysql_error());

}

echo "数据表创建成功\n";

mysql_close($conn);

mysql 插入数据

18.向mysql数据表插入数据通用的 insert into sql语法:

insert into table_name (field1, field2,...fieldn )

values

( value1,value2,...valuen );

如果数据是字符型,必须使用单引号或者双引号,如:"value"。

w3cschool_tbl表插入一条数据:

mysql> insert intow3cschool_tbl

->(w3cschool_title, w3cschool_author,submission_date)

->values

->("learn php", "johnpoul", now());

(->)不是sql语句的一部分,它仅表示一个新行,如sql语句太长,可通过回车键创建一个新行编写sql语句,sql语句的命令结束符为分号(;)。

19.使用php脚本插入数据

$sql = "insert into w3cschool_tbl ".

"(w3cschool_title,w3cschool_author,submission_date) ".

"values ".

"('$w3cschool_title','$w3cschool_author','$submission_date')";

mysql 查询数据

20.为在mysql数据库中查询数据通用的 select语法:

select column_name,column_name

from table_name

[where clause]

[offset m ][limit n]

可以通过select 命令读取一条或者多条记录。

可以通过offset指定select语句开始查询的数据偏移量默认情况下偏移量为0。

可以使用 limit 属性来设定返回的记录数。

你可以使用星号(*)来代替其他字段,select语句会返回表的所有字段数据

mysql> select * from w3cschool_tbl

21.使用php脚本来获取数据

使用php函数的mysql_query()及sql select命令来获取数据。

该函数用于执行sql命令,然后通过 php 函数 mysql_fetch_array() 来使用或输出所有查询的数据。

尝试以下实例来显示数据表w3cschool_tbl 的所有记录

$sql = 'select w3cschool_id,w3cschool_title,

w3cschool_author,submission_date

from w3cschool_tbl';

mysql_select_db('w3cschool');

$retval = mysql_query( $sql, $conn );

if(! $retval )

{

die('could not get data: ' .mysql_error());

}

while($row =mysql_fetch_array($retval, mysql_assoc))

while($row =mysql_fetch_assoc($retval))

用mysql_num参数显示数据表

while($row =mysql_fetch_array($retval, mysql_num))

用mysql_num参数显示数据表

{

echo "tutorial id:{$row['w3cschool_id']}
".

"title:{$row['w3cschool_title']}
".

"author:{$row['w3cschool_author']}
".

"submission date : {$row['submission_date']}
".

"--------------------------------
";

}

mysql_free_result($retval); 释放游标内存

echo "fetched data successfully\n";

mysql_close($conn);

mysql_assoc, 设置该参数查询结果返回关联数组,你可以使用字段名称来作为数组的索引。

mysql 选择数据

22.从mysql表中使用sql select语句来读取数据。

如需有条件地从表中选取数据,可将 where 子句添加到 select 语句中

以下是sql select语句使用 where 子句从数据表中读取数据的通用语法:

select field1,field2,...fieldn from table_name1, table_name2...

[where condition1 [and[or]] condition2.....

where子句也可以运用于sql的 delete 或者 update 命令。

使用 like 来比较字符串,否则mysql的where子句的字符串比较是不区分大小写的。 你可以使用 binary 关键字来设定where子句的字符串比较是区分大小写的。

23.使用php脚本读取数据

使用php函数的mysql_query()及相同的sql select 带上 where 子句的命令来获取数据。该函数用于执行sql命令,然后通过 mysql_fetch_array() 来输出所有查询的数据。

$sql = 'select w3cschool_id,w3cschool_title,

w3cschool_author, submission_date

from w3cschool_tbl

wherew3cschool_author="sanjay"';

mysql update

24.修改或更新mysql中的数据,我们可以使用sql update 命令来操作。

通用sql语法:

update table_name set field1=new-value1, field2=new-value2

[where clause]

更新数据表中 w3cschool_id 为 3 的 w3cschool_title 字段值:

mysql>update w3cschool_tbl

-> set w3cschool_title='learning java'

- > where w3cschool_id=3;

使用php脚本更新数据

$sql = 'update w3cschool_tbl

setw3cschool_title="learning java"

where w3cschool_id=3';

mysql delete

25.delete from table_name[where clause

如果没有指定 where 子句,mysql表中的所有记录将被删除。

可以在 where 子句中指定任何条件

删除w3cschool_tbl 表中 w3cschool_id 为3 的记录

mysql> delete fromw3cschool_tbl where w3cschool_id=3;

用 php 脚本删除数据

$sql = 'delete fromw3cschool_tbl

where w3cschool_id=3';

mysql like 子句

ql like 子句中使用百分号(%)字符来表示任意字符

没有使用百分号(%),like 子句与等号(=)的效果是一样的。

26.ql select语句使用 like子句从数据表中读取数据的通用语法:

select field1,field2,...fieldn table_name1, table_name2...

where field1 likecondition1 [and [or]] filed2 = 'somevalue'

like 通常与 % 一同使用,类似于一个元字符的搜索

在php脚本中使用 like 子句

$sql = 'selectw3cschool_id, w3cschool_title,

w3cschool_author,submission_date

from w3cschool_tbl

where w3cschool_author like"%jay%"';

mysql 排序

select field1,field2,...fieldn table_name1, table_name2...

order by field1,[field2...] [asc [desc]]

asc 或 desc 关键字来设置查询结果是按升序或降序排列。默认情况下,它是按升排列。

mysql 分组

select column_name,function(column_name)

from table_name

where column_nameoperator value

group by column_name;

with rollup 可以实现在分组统计数据基础上再进行相同的统计(sum,avg,count…)。

coalesce 来设置一个可以取代null 的名称,coalesce 语法:

select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

mysql> selectcoalesce(name, '总数'), sum(singin) as singin_countfrom employee_tbl group by name withrollup;

+--------------------------+--------------+

| coalesce(name, '总数') | singin_count |

+--------------------------+--------------+

| 小丽 | 2 |

| 小明 | 7 |

| 小王 | 7 |

| 总数 | 16 |

+--------------------------+--------------+

mysql 连接

27.在select, update 和 delete 语句中使用 mysql 的 join 来联合多表查询。

join 按照功能大致分为如下三类:

inner join(内连接,或等值连接):获取两个表中字段匹配关系的记录。

left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

right join(右连接):与 left join 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

| w3cschool_author |w3cschool_count |

+-----------------+----------------+

| mahran | 20 |

| mahnaz | null |

| jen | null |

| gill | 20 |

| john poul | 1 |

| sanjay | 1 |

+-----------------+----------------+

mysql> select * fromw3cschool_tbl;

+-------------+----------------+-----------------+-----------------+

| w3cschool_id | w3cschool_title | w3cschool_author |submission_date |

+-------------+----------------+-----------------+-----------------+

| 1 | learn php | john poul |2007-05-24 |

| 2 | learnmysql | abdul s | 2007-05-24 |

| 3 | javatutorial | sanjay | 2007-05-06 |

连接以上两张表来读取w3cschool_tbl表中所有w3cschool_author字段在tcount_tbl表对应的w3cschool_count字段值:

mysql> selecta.w3cschool_id, a.w3cschool_author, b.w3cschool_count from w3cschool_tbl ainner join tcount_tbl b on a.w3cschool_author = b.w3cschool_author;

+-----------+---------------+--------------+

| w3cschool_id | w3cschool_author | w3cschool_count |

+-----------+---------------+--------------+

| 1 | john poul | 1 |

| 3 | sanjay | 1 |

w3cschool_tbl 为左表,tcount_tbl 为右表,

mysql> selecta.w3cschool_id, a.w3cschool_author, b.w3cschool_count from w3cschool_tbl a leftjoin tcount_tbl b on a.w3cschool_author = b.w3cschool_author;

+-------------+-----------------+----------------+

| w3cschool_id | w3cschool_author | w3cschool_count |

+-------------+-----------------+----------------+

| 1 | john poul | 1 |

| 2 | abdul s | null |

| 3 | sanjay | 1 |

左边的数据表w3cschool_tbl的所有选取的字段数据,即便在右侧表tcount_tbl中没有对应的w3cschool_author字段值abdul s。

mysql null

is null: 当列的值是null,此运算符返回true。

is not null: 当列的值不为null, 运算符返回true。

null值与任何其它值的比较(即使是null)永远返回false,

使用php脚本处理 null 值:

php脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。

mysql 正则表达式

28.mysql中使用 regexp 操作符来进行正则表达式匹配。

^ 匹配输入字符串的开始位置。如果设置了 regexp 对象的 multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$ 匹配输入字符串的结束位置。如果设置了regexp 对象的 multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

. 匹配除"\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

实例(表名:person_tbl )来加深我们的理解:

查找name字段中以'st'为开头的所有数据:

mysql> select name from person_tbl where name regexp '^st';

查找name字段中以'ok'为结尾的所有数据:

mysql> select name from person_tbl where name regexp 'ok$';

查找name字段中包含'mar'字符串的所有数据:

mysql> select name from person_tbl where name regexp 'mar';

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

mysql> select name from person_tbl where name regexp'^[aeiou]|ok$';

mysql 事务

29.mysql 事务主要用于处理操作量大,复杂度高的数据。

在mysql中只有使用了innodb数据库引擎的数据库或表才支持事务

事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行

事务用来管理insert,update,delete语句

事务必须满足4个条件(acid): atomicity(原子性)、consistency(稳定性)、isolation(隔离性)、durability(可靠性)

1、事务的原子性:一组事务,要么成功;要么撤回。

2、稳定性: 有非法数据(外键约束之类),事务撤回。

3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

4、可靠性:软、硬件崩溃后,innodb数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。