最近应部门主管要求,要求部门提高数据库这块的技能,我特地去学习了一下mysql。跟着网站上的教材做了一份mysql的入门教学。好了,废话也不多说了。先在跟着我一起看看mysql吧。
1.连接mysql
连接到本地的mysql,有两种方法
①打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码
②通过开始菜单下的mysql命令行程序,进行进入,只需输入密码即可
如果你想观察另外主机的连接到远程上的mysql,那么使用以下的方法
假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p abcd123;
想必大家都看出来是怎么样的一个格式了:
mysql -h(-p之后加上远程主机数据库IP地址)
-u(-u之后加上数据库用户名)
-p(-p之后加上数据库密码)
连到本机和远程连接到另外主机的方式是不一样的,请大家注意
注:mysql命令行下,若行尾没有分号,可以多行执行一个语句,在我们想执行较为复杂的sql语句时,这无疑让sql语句看起来更加整洁好用
③.退出mysql命令:exit(回车)
2.数据库操作
2.1:创建数据库
命令:create database 注意!sql语句后面要加;
建立一个名为wyx的数据库
mysql> create database wyx;
例2:创建数据库并分配用户
①CREATE DATABASE 数据库名;
②GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
这句话的意思是我们利用超级用户localhost把SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER 这些sql权限赋予wyx这个数据库
学习到这里,可能有人问每次都有个时间,这个时间就是执行sql的时间拉;然后如果时间很小,则忽略不计,则会显示为0.00 sec;由于我们是对数据库权限进行操作,那么影响的行数肯定是0行拉
③SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');
给数据库设置密码
2.2:显示数据库
命令:show databases (注意:最后有个s)
可以看到我新增的wyx数据库了,另外几个数据库
2.3:删除数据库
命令:drop database
删除一个确定存在的数据库
删除一个不确定存在的数据库
mysql> drop database drop_database;
ERROR 1008 (HY000): Can't drop database 'drop_database'; database doesn't exist
//发生错误,不能删除'drop_database'数据库,该数据库不存在。
mysql> drop database if exists drop_database;
Query OK, 0 rows affected, 1 warning (0.00 sec)//产生一个警告说明此数据库不存在
mysql> create database drop_database;
Query OK, 1 row affected (0.00 sec)
mysql> drop database if exists drop_database;//if exists 判断数据库是否存在,不存在也不产生错误
Query OK, 0 rows affected (0.00 sec)
2.4:连接数据库
命令: use
例如:如果xhkdb数据库存在,尝试存取它:
mysql> use xhkdb;
屏幕提示:Database changed
有些朋友问到,连接以后怎么退出。其实,不用退出来,use 数据库后,使用show databases就能查询所有数据库,如果想跳到其他数据库,用
use 其他数据库名字
就可以了。
2.5:当前选择的数据库
一些mysql中select的特殊功能
2.5.1显示MYSQL的版本
mysql> select version();
2.5. 2. 显示当前时间
mysql> select now();
2.5. 3. 显示年月日
SELECT DAYOFMONTH(CURRENT_DATE);
SELECT MONTH(CURRENT_DATE);
SELECT YEAR(CURRENT_DATE);
2.5. 4. 显示字符串
mysql> SELECT "welecome to my blog!";
2.5. 5. 当计算器用
select ((4 * 4) / 10 ) + 25;
3.数据表操作
3.1创建数据表
命令:create table ( [,.. ]);
例如,建立一个名为MyClass的表,
字段名
数字类型
数据宽度
是否为空
是否主键
自动增加
默认值
id
int
4
否
primary key
auto_increment
name
char
20
否
sex
int
4
否
0
degree
double
16
是
mysql>createtableMyClass(
> id int(4) not nullprimary key auto_increment,
> name char(20) not null,
> sex int(4) not nulldefault'0',
> degree double(16,2));
注意:①not null为非空,若不设置,则默认为空,系统会给他分配另外的内存,一般建议设置为not null,避免不必要的内存浪费
②primary key 主键
③auto——increment 设置为自增属性
④default设置默认值
⑤double(16,2) 处理数据,最多保留2位小数
3.2显示刚刚建的数据库
命令: desc 表名,或者show columns from 表名
mysql>desc Myclass
对于key这个属性,可以提到以下知识点,我还没深入研究,想深入研究的同学自己尝试一下:
使用MySQL数据库desc 表名时,我们看到Key那一栏,可能会有4种值,即' ','PRI','UNI','MUL'。
1. 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列;
2. 如果Key是PRI, 那么该列是主键的组成部分;
3. 如果Key是UNI, 那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL);
4. 如果Key是MUL, 那么该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL。
如果对于一个列的定义,同时满足上述4种情况的多种,比如一个列既是PRI,又是UNI,那么"desc 表名"的时候,显示的Key值按照优先级来显示 PRI->UNI->MUL。那么此时,显示PRI。
一个唯一性索引列可以显示为PRI,并且该列不能含有空值,同时该表没有主键。
一个唯一性索引列可以显示为MUL, 如果多列构成了一个唯一性复合索引,因为虽然索引的多列组合是唯一的,比如ID+NAME是唯一的,但是没一个单独的列依然可以有重复的值,只要ID+NAME是唯一的即可。
3.3删除数据表
命令:drop table
3.4表插入数据
命令:①给表的特定表列(字段名)插入值
insert into [( ,.. ])] values [( 值1 ), ( 值n )]
②给整表插入数据
insert into value [(值1),(值n)]
3.5表更新数据
命令:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例:update Myclass set name='wyx' where id=2;
3.6表删除语句
DELETE FROM 表名称 WHERE 列名称 = 值
4.应用示例
4.1示例一
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(,’allen’,'大连一中’,'1976-10-10′)
;
接下来给个练习大家自己做吧。。。
一个建表和建库的练习
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ''深圳'',
year date
); //建表结束
//以下为插入字段
insert into teacher values('''',''glchengang'',''深圳一中'',''1976-10-10'');
insert into teacher values('''',''jack'',''深圳一中'',''1975-12-23'');
注:在建表中
1、将ID设为长度为3的数字字段:int(3);并让它每个记录自动加一:auto_increment;并不能为空:not null;而且让他成为主字段primary key。
2、将NAME设为长度为10的字符字段
3、将ADDRESS设为长度50的字符字段,而且缺省值为深圳。
4、将YEAR设为日期字段