分类: 数据库开发技术
2009-11-15 15:54:49
MySQL学习笔记:
mysql 版本5.0
Mysql 中每个命令都是以“;”结尾的
查看时间:select now();
查看状态:show status;
查询表的结构:desc/describe tablename;
查看当前有谁在用哪个数据库,并且在做什么: show processlist也可以加上\G参数;
怎么创建一个数据库那 :create database databasename;
创建一个表:create table tablename (1”“栏1资料种类,”“栏2”“栏2资料种类“,“栏3”“栏3资料种类,“栏N”“栏N资料种类 属性)
注意在使用char和varchar 时要注意一点这两个列类型要和后边的数字中间用空格隔开并且数字要用”()”括起来并且用null和not null时not和null之间要有空格
我们可以对资源种类的属性进行设置一般设置都是直接在资料种类后边直接设置这些属性通常可以是(null,not null,unique,check等)
Unique主要是保证一个栏位中的值都不一样
Check主要是保证一个栏位中的值必须符合条件使用时后边要跟着条件例如:(sid integer check (sid>0))
资源种类中如果有字数限制是我们可以用char (字数限制 值) varchar (字数限制值)例如:first_name char(20) not null
我们可以用“;”来隔开连个mysql命令
向表中添加内容我们用insert into tablename ( “列1“,列2”“列3”……) values(‘第一列的列值‘,‘第二列的列值’,’第三列的列值’)
注意:如果某一列的值为数字则此列可以不用单引号引起来如果是最后一列的话就不要用“,”隔开了值也是如此;我们也可以同时输入多行各行之间用”,“来隔开;
例如:
insert into hhfbak ( first_name,last_name,birthday,homeaddr ) values('hua
ng','haifeng',1214,'
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
Mysql用户管理:
增加mysql用户有三种用法:
第一用grant语句:
Grant select on databasename.* to ‘username’@’%’ indentified by ‘mima’ with grant option;
注意一点:在这个语句中的任何符号都不能省;“%”代表的事任何主机密码要用“”引起来
第二用insert语句:
Insert into user (Host,Username,Password)values(‘hostname‘,’username’,’’);
Flush privileges (这个是允许从某台主机的名叫主机的某个用户连接某个数据库,这个应该是在使用某个数据库的条件的前提下的)
第三种方法:
Create user username identified by password ‘usernamepassword’
Mysql数据库密码的设置修改:
Mysqladmin -u username –password “密码”
创建一个从任何主机登陆服务器的超级用户:
Grant all privileges on *.* to username@localhost identified by ‘something’ with grant option;
Grant all privileges on *.* to username@% identified by ‘something’ with grant option
修改密码:
Mysqladmin –u username –p”oldpassword” password “newpassword”
修改root用户密码的方法:
Shell> mysql –u root
Mysql> set password root=”mima”;
连接mysql数据库语法是:
Mysql -h hostname -u username –p password
在一个存在的表中加入列:alter table tablename add column ‘列名‘ 数据类型
使用某个数据库中的某个表可以使用db_name.tbl_name
在xp下启动和关闭数据库服务:
Net start mysql
Net stop mysql
数据库管理之语法部分:
首先是select的用法:
从某个表中查看某些内容:
Select sth from table_name;(注意这里的sth指的是栏位名)可以查看多个列值各个列值要用“,”分开
查看某个栏位的不同的值这里主要是使用distinct:
Select distinct “栏位名“ from table_name;
查看某个表中某个栏内的某个栏值有几下这种方法:
用where来限定选择行的条件,字符串的比较是不分大小写的
Select sth from table_name where “条件”
列子如下:
mysql> select * from hhfbak;
+------------+-----------+----------+----------+
| first_name | last_name | birthday | homeaddr |
+------------+-----------+----------+----------+
| bill | haifeng | 1214 |
| shen | yong | 1218 | shanghai |
| huang | haifeng | 1214 |
| huang | haifeng | 1214 |
| li | ping | 1010 |
+------------+-----------+----------+----------+
5 rows in set (0.00 sec)
mysql> select username from customerbak where 'birthday'='
Empty set (0.00 sec)
mysql> select username from customerbak where birthday="
+----------+
| username |
+----------+
| hhf |
+----------+
1 row in set (0.01 sec)
注意:注意这两个搜寻方法的异同及搜索的结果这个条件是有要求的当列值是数字这里是单纯的数字时就可以不用双引号引得而其他的则必须否则不会有任何显示列名是不用引号引得;
Question:
mysql> select version();
+-----------+
| version() |
+-----------+
|
+-----------+
1 row in set (0.01 sec)
ERROR 1054 (42S22): Unknown column 'bill' in 'field list'
mysql> set password for root="123456";
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
Password hash should be a 41-digit hexadecimal number
Sql questions:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| func |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| proc |
| procs_priv |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
17 rows in set (0.00 sec)
mysql> use hhf;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------+
| Tables_in_hhf |
+---------------+
| customer |
| customerbak |
| hhf |
| hhfbak |
| ladies |
| user_list |
+---------------+
6 rows in set (0.00 sec)
mysql> grant all on *.* to root@"%" identified by "123456";
Query OK, 0 rows affected (0.01 sec)
mysql> quit;
Bye
[root@www ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
mysql> grant all on *.* to root@"localhost" identified by "123456";
Query OK, 0 rows affected (0.00 sec)
这里的*.*第一个*代表着数据库第二个*代表表如果是准备表示某个数据库上的所有表我们可以用databasename.* 某个数据库上的某个表我们可以用databasename.tablename
[root@www ~]# mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version:
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> quit;
Bye
补充知识:
数据库列的类型:
数值列类型:
Int 标准整数 bigint 大整数
Tinyint 非常小的整数 float 单精度浮点数
Smallint 小的整数 double 双精度浮点数
Mediumint 中等较大整数 decimal 一个串的浮整数
串列类型:
Char 固定长度字符串
Varchar 可变长度字符串
Tinyblog 非常小的blog
Blog 小的blog
Mediumblog 中等较大的blog
Longblog 大blog
Tinytext 非常小的文本串
Text 小文本串
Mediumtext 中等文本串
Longtext 大文本串
Enum 枚举;列可赋予某个枚举成员
Set 集合;列可赋予某个集合成员
日期和时间列类型:
Date yyyy-mm-dd的格式表示日期
Time hh:mm:ss的格式表示时间
Datetime yyyy-mm-dd hh:mm:ss的格式表示时间
Timestamp yyyymmddhhmmss来表示时间
Year yyyy的格式表示时间值
注意在使用char和varchar 时要注意一点这两个列类型要和后边的数字中间用空格隔开并且数字要用”()”括起来
算术运算符:
+ 加 * 乘
- 减 / 除
比较运算符:
> 大于 = 等号
< 小于 != 或<> 不等于
>= 大于等于
<= 小于等于
逻辑运算符:
And 逻辑和/与
Or 逻辑或
Not 逻辑非
And和or的用法:
mysql> select first_name from hhfbak WHERE last_name="haifeng" and last_name="ping";
Empty set (0.00 sec)
mysql> select first_name from hhfbak WHERE last_name="haifeng" or last_name="ping";
注意and和or前后都是有空格的并且每个条件都是由列名=“列值”
Mysql复杂条件设置:
Mysql 基础知识:
在mysql 中存在五张表:db,host,,user,columns_priv_tables_priv
Grant 和revoke用法详解:
Grant 主要是在用户管理时既可以创建用户又可以赋权限用法:
mysql> Grant privileges (columns) on what to user identified by “password” with grant option;
在这里注意:这里的user代表着username@hostname 这里主机名是用户可以从哪里连接服务器,如果是任何地方的话我们我们可用”%”代表是任何主机意为可以从任何地方连接数据库服务器在这里注意一点我们要用“”“将主机名其引起来在主机名这边在说一点:
(这里是指定的用户可以在neteasn.net这个域的任何主机上登录)
username@“192.168.1.%“ (这里的意思是指定的用户只能在192.168.1.点段的主机上登录)
(这里是192.168.1点段的掩码是255.255.255.0的ip是192.168.1.8这台主机上登录)如果是针对某个数据库中的某个表中的某个列时那么()里面必须存在列名如果有多个列时我们必须用“,”将各个列分开
with grant option 允许用户受权限给其他人若没有这个选项则没有为用户授权限的权限
收回用户权限:
收回 用户权限我们可以使用revoke,revoke的语法是:
mysql> Revoke privileges (columns)on sth from sw;
这个“STh“可以是数据库也可以是 表
删除用户我们用delete语句将其删除语法是:
mysql> delete from user where user = “username“ and host = “hostname”;
mysql> flush privileges;
Privileges 详细:
Alter 更改表和索引 drop 删除表和数据库
Create 创建表和数据库 index 创建和删除索引
Delete 删除表中的所有记录 insert 向表中插入新的记录
Reference 未用 select 检索表中的已有记录
Update 修改表中的记录 file 读写服务器中的文件
Process 查看有关进程在服务器中的执行和取消信息
Reload 重新加载授权表或刷新日志主机高速缓存或表高速缓存
Shutdown 关闭服务器 all 任何权限
Usage 无权限的权限
Mysql 数据库权限知识:
在mysql 数据库权限方面全局权限最大适用于所有的数据库和表
然后是数据库级的权限她是针对某个数据库
表级的权限是适用于某个表的