MySQL学习笔记(1)

MySQL命令

C:/Program Files/MySQL/MySQL Server 5.0/bin>mysql -u root    -》(进入mqsql数据库)

Welcome to the MySQL monitor.  Commands end with ; or /g.

Your MySQL connection id is 2 to server version: 5.0.19-nt

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

如果用户存在密码:则

C:/Program Files/MySQL/MySQL Server 5.0/bin>mysql --user=root -p

Welcome to the MySQL monitor.  Commands end with ; or /g.

Your MySQL connection id is 2 to server version: 5.0.19-nt

mysql> create database dbtest;    (创建数据库)

Query OK, 1 row affected (0.09 sec)

mysql> show databases;   (显示所有数据库)

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

| Database           |

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

| information_schema |

| dbtest             |

| mysql              |

| test               |

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

4 rows in set (0.00 sec)

mysql> use dbtest;      (运用数据库)

Database changed

create table student(
id int,
name char(16),
english tinyint,
chinese tinyint,
time timestamp );

mysql> create table student(    (在数据库dbtest中创建表)

    -> id int,

    -> name char(16),

    -> english tinyint,

    -> chinese tinyint,

    -> time timestamp

    -> );

Query OK, 0 rows affected (0.09 sec)

Mysql>alter table bonusrule add (bonus  int(6));     修改表结构

mysql> insert into student(id,name,english,chinese) values(1,"tome",66,99);   (往表中插入记录)

mysql> select * from student;  (查询表中记录)

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

| id   | name | english | chinese | time                |

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

| 1    | tome | 66      | 99      | 2006-03-24 11:12:19 |

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

1 row in set (0.00 sec)

mysql> update student set english=80 where id=1;  (修改表中记录)

SELECT selection_list    选择哪些列

FROM table_list     从何处选择行

WHERE primary_constraint   行必须满足什么条件

GROUP BY grouping_columns      怎样对结果分组

HAVING secondary_constraint     行必须满足的第二条件

ORDER BY sorting_columns 怎样对结果排序

LIMIT count  结果限定

COUNT()函数计数非NULL结果的数目

MySQL命令

>MySQL命令
use <dbname> [LIKE wild];
show tables;
show databases;
?/help;
exit/quit;
mysqladmin version;
mysql mysqladmin version;
net start mysql;
mysqladmin variables;
mysqladmin -h hostname --port=port_number variables;
缺省的情况下,端口是3306,套接字的名字是MySQL
mysqladmin shutdown;
mysqladmin reload;
mysqladmin –help;
mysqladmin -u root -p shutdown;
如果完全省略了 -p 选项,mysql 就认为您不需要口令,不作提示
shell>mysql –h mysql.domain.net –u tom -p;
CREATE DATABASE db_name;
DROP DATABASE [IF EXISTS] db_name;
SHOW/ DESCRIBE;

source E:/Tomcat/webapps/2richshop1.1/doc/sql.txt;

GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION

修改root用户口令:
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user=hunte;
  mysql> FLUSH PRIVILEGES;
  mysql> QUIT

 


SELECT 语句的语法如下:

SELECT selection_list    选择哪些列

FROM table_list     从何处选择行

WHERE primary_constraint   行必须满足什么条件

GROUP BY grouping_columns      怎样对结果分组

HAVING secondary_constraint     行必须满足的第二条件

ORDER BY sorting_columns 怎样对结果排序

LIMIT count  结果限定

注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个HAVING子句必须跟在GROUP BY子句之后和ORDER BY子句之前。


COUNT()函数计数非NULL结果的数目

 

TIMESTAMP列类型提供一种类型,TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERTUPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。

自动更新第一个TIMESTAMP列在下列任何条件下发生:

l         列没有明确地在一个INSERTLOAD DATA INFILE语句中指定。

l         列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)

l         你明确地设定TIMESTAMP列为NULL.

除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()

例如,创建如下的表:

mysql> CREATE TABLE student

       -> (

       -> id int,

       -> name char(16),

       -> english tinyint,

       -> chinese tinyint,

       -> history tinyint,

       -> time timestamp

       -> );

向表中插入记录,可以查看效果:

mysql> INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);

查看记录的存储情况:

mysql> SELECT * FROM student;

 

+------+---------+---------+---------+---------+----------------+
| id   | name    | english | chinese | history | time           |
+------+---------+---------+---------+---------+----------------+
|   11 | Tom     |      66 |      93 |      67 | 20010220123335 |
+------+---------+---------+---------+---------+----------------+
 

你可以看到time列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:

mysql> UPDATE student SET english=76 WHERE id=11;

mysql> SELECT * FROM student;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      76 |      93 |      67 | 20010220125736 |
+------+------+---------+---------+---------+----------------+

可以清楚的看到,time列的时间被自动更改为修改记录的时间。

有时候你希望不更改任何值,也能打到修改TIMESTAMP列的值,这时只要设置该列的值为NULLMySQL就可以自动更新TIMESTAMP列的值:

mysql> UPDATE student SET time=NULL WHERE id=11;

mysql> select * from student where id=11;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      76 |      93 |      67 | 20010220130517 |
+------+------+---------+---------+---------+----------------+

通过明确地设置希望的值,你可以设置任何TIMESTAMP列为不同于当前日期和时间的值,即使对第一个TIMESTAMP列也是这样。例如,如果,当你创建一个行时,你想要一个TIMESTAMP被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:

l         MySQL在行被创建时设置列,这将初始化它为当前的日期和时间。

l         当你执行随后的对该行中其他列的更改时,明确设定TIMESTAMP列为它的当前值。

例如,当你在修改列时,可以把原有的值付给TIMESTAMP列:

mysql> UPDATE student SET english=66,time=time WHERE id=11;

mysql> select * from student where id=11;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      66 |      93 |      67 | 20010220130517 |
+------+------+---------+---------+---------+----------------+

另一方面,你可能发现,当你想要实现上面这个效果时,很容易用一个你用NOW()初始化的DATETIME列然后不再改变它,这样也许直接些。 但是,TIMESTAMP列的以后好处是存储要求比较小,节省空间。TIMESTAMP的存储需求是4字节,而DATETIME列的存储需求是8字节。

 

MySQL中,SQL的模式缺省是忽略大小写的。


MySQL中,数据库和表对应于在那些目录下的目录和文件,因而,内在的操作系统的敏感性决定数据库和表命名的大小写敏感性。这意味着数据库和表名在Unix上是区分大小写的,而在Win32上忽略大小写。


注意:在Win32上,尽管数据库和表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下列查询将不工作,因为它作为my_table和作为MY_TABLE引用一个表:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

2、列名
列名在所有情况下都是忽略大小写的。

3、表的别名
表的别名是区分大小写的。下列查询将不工作,: 因为它用aA引用别名:

mysql> SELECT col_name FROM tbl_name AS a

           WHERE a.col_name = 1 OR A.col_name = 2;

4、列的别名
列的别名是忽略大小写的。

5、字符串比较和模式匹配
缺省地,MySQL搜索是大小写不敏感的(尽管有一些字符集从来不是忽略大小写的,例如捷克语)。这意味着,如果你用col_name LIKE a%搜寻,你将得到所有以Aa开始的列值。如果你想要使这个搜索大小写敏感,使用象INDEX(col_name, "A")=0检查一个前缀。或如果列值必须确切是"A",使用STRCMP(col_name, "A") = 0

简单的比较操作(>=>= < <=、排序和聚合)是基于每个字符的排序值。有同样排序值的字符(Ee)被视为相同的字符!

LIKE比较在每个字符的大写值上进行(“E”=”e”)

如果你想要一个列总是被当作大小写敏感的方式,声明它为BINARY

例如:

mysql> SELECT "E"="e","E"=BINARY "e";

+---------+----------------+
| "E"="e" | "E"=BINARY "e" |
+---------+----------------+
|       1 |              0 |
+---------+----------------+

 


MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXPNOT REGEXP操作符(RLIKENOT RLIKE,它们是同义词)

扩展正则表达式的一些字符是:

“.”匹配任何单个的字符。

一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”“b”“c”。为了命名字符的一个范围,使用一个“-”“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。

正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”“[a-zA-Z]”匹配两种写法的任何字母。

如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”

为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”

 

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";

+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
 

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

 

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";

+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+
 

为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”

 

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";

+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+
 

既然如果一个正规表达式出现在值的任何地方,其模式匹配了,就不必再先前的查询中在模式的两方面放置一个通配符以使得它匹配整个值,就像如果你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”“$”匹配名字的开始和结尾,和5“.”实例在两者之间:

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";

+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
 

你也可以使用“{ n }”“重复n操作符重写先前的查询:

 

mysql> SELECT * FROM pet WHERE name REGEXP "^.{ 5 }$";

+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

 

语法:SELECT FROM table_reference LEFT JOIN table_reference ON conditional_expr

 

1.创建数据库

在 mysql 提示,輸入:
create database lib13; 按 Enter
就會在 MySQL建立一個名為 lib13 的資料庫。

2.显示所有数据库

Show databases

3.运用数据库

在 mysql 提示,輸入:
use lib13; 按 Enter

4.建表:

在 mysql 提示,輸入:
create table Test ( 按 Enter
id int primary key auto_increment, 按 Enter
name varchar(16) 按 Enter
); 按 Enter

MySQL 就會在現在所選用的資料庫,產生一個 Test 資料表。在這個資料表中,有兩個欄位:id 和 name 。id的資料型態是整數(INT),同時,也是 Test 資料表的主索引欄位 (primary key),並且再新增紀錄時,會自動遞增 (auto_increment)。name的資料型態是可變長度的字元,最多可放16個字元 (VARCHAR(16))。

5.显示表中列

在 mysql 提示,輸入:
show columns from Test; 按 Enter
或者
describe Test; 按 Enter

6.删除表

在 mysql 提示,輸入:
drop table Test; 按 Enter

7.删除数据库

在 mysql 提示,輸入:
drop database lib13; 按 Enter

Show.jsp代码

<%@page import="java.sql.*"

import ="java.util.*"

import ="java.io.*"

contentType="text/html; charset=gb2312"

%>

<html>

<head>

<title>使用MYsql数据库</title>

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

</head>

<body>

<p align="center"><u><font size="5" face="华文新魏">使用JSP读取Mysql数据库</font></u></p>

<%!

String host="localhost"; //数据库主机

String database="dbtest"; //数据库名

String user="root"; //用户名

String pass=""; //口令

%><% java.sql.Connection sqlConn; //数据库连接对象

java.sql.Statement sqlStmt; //语句对象

java.sql.ResultSet sqlRst; //结果集对象

//登记JDBC驱动对象

Class.forName ("org.gjt.mm.mysql.Driver").newInstance ();

//连接数据库

sqlConn= java.sql.DriverManager.getConnection ("jdbc:mysql://"+host+"/"+database,user,pass);

//创建语句对象

sqlStmt=sqlConn.createStatement (java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);

//执行Sql语句

String sqlQuery="select count(*) from student";

sqlRst=sqlStmt.executeQuery (sqlQuery);

sqlRst.next();

int count=sqlRst.getInt(1); //取得总的留言记录数

sqlQuery="select * from student order by id desc;";

sqlRst=sqlStmt.executeQuery (sqlQuery); //执行SQL语句

%>

总共有<%=count%>个学生

<table border="1" width="100%" bordercolorlight="#CC99FF" cellpadding="2" bordercolordark="#FFFFFF" cellspacing="0">

<tr>

  <td align="center">&nbsp;ID</td>

  <td align="center">姓名</td>

  <td align="center">英语</td>

  <td align="center">中文</td>

  <td align="center">时间</td>

</tr>

<% while (sqlRst.next()) { //取得下一条记录 %>

<tr><!--显示记录-->

  <td><%=sqlRst.getString("id")%></td>

  <td><%=sqlRst.getString("name")%></td>

  <td><%=sqlRst.getString("english")%></td>

  <td><%=sqlRst.getString("chinese") %></td>

  <td><%=sqlRst.getString("time") %></td>

</tr>

<% } %>

</table>

</body>

<%

//关闭结果集对象

  sqlRst.close();

  //关闭语句对象

sqlStmt.close ();

//关闭数据库连接

sqlConn.close();

%>

mysql的my.ini配置项

[client]
default-character-set = utf8
[mysqld]

datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock


symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
collation-server=utf8_general_ci
character_set_server=utf8
max_allowed_packet=1000M
log-bin=mysql-bin
server-id=1
binlog-do-db = scheduler
replicate-do-db=scheduler
binlog-do-db = sem
replicate-do-db=sem
binlog-do-db = kms
replicate-do-db=kms
binlog-do-db = uim
replicate-do-db=uim
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值